Skip to content

Adding @views yields ambiguity for certain assignment of mutable CuArray #587

Closed

Description

@cyanescent

This may be similar to #554

MWE:

using CUDA 

n=(16,16,16)
P = CUDA.zeros(Float32,n...)
active = (1:16).<12

function update1!(P)
    P.=P.+2
end
function update2!(P)
    P[:]=P.+2
end

update1!(P); # Works
update2!(P); # Works

@views update1!(P); # Works
@views update2!(P); # Works

update1!(P[:,:,active]); # Works
update2!(P[:,:,active]); # Works

@views update1!(P[:,:,active]); # Works
@views update2!(P[:,:,active]); # Ambiguity
ERROR: MethodError: _unsafe_setindex!(::IndexCartesian, ::Base.ReshapedArray{…}, ::CuArray{…}, ::Base.Slice{…}) is ambiguous.

Candidates:
  _unsafe_setindex!(::IndexStyle, A::Union{Base.LogicalIndex{T, <:GPUArraysCore.AbstractGPUArray}, Base.ReinterpretArray{T, N, <:Any, <:Union{SubArray{<:Any, <:Any, var"#s14"}, var"#s14"}} where var"#s14"<:GPUArraysCore.AbstractGPUArray, Base.ReshapedArray{T, N, <:Union{Base.ReinterpretArray{<:Any, <:Any, <:Any, <:Union{SubArray{<:Any, <:Any, var"#s15"}, var"#s15"}}, SubArray{<:Any, <:Any, var"#s15"}, var"#s15"}} where var"#s15"<:GPUArraysCore.AbstractGPUArray, SubArray{T, N, <:Union{Base.ReinterpretArray{<:Any, <:Any, <:Any, <:Union{SubArray{<:Any, <:Any, var"#s16"}, var"#s16"}}, Base.ReshapedArray{<:Any, <:Any, <:Union{Base.ReinterpretArray{<:Any, <:Any, <:Any, <:Union{SubArray{<:Any, <:Any, var"#s16"}, var"#s16"}}, SubArray{<:Any, <:Any, var"#s16"}, var"#s16"}}, var"#s16"}} where var"#s16"<:GPUArraysCore.AbstractGPUArray, LinearAlgebra.Adjoint{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, LinearAlgebra.Diagonal{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, LinearAlgebra.LowerTriangular{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, LinearAlgebra.Symmetric{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, LinearAlgebra.Transpose{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, LinearAlgebra.Tridiagonal{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, LinearAlgebra.UnitLowerTriangular{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, LinearAlgebra.UnitUpperTriangular{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, LinearAlgebra.UpperTriangular{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, PermutedDimsArray{T, N, <:Any, <:Any, <:GPUArraysCore.AbstractGPUArray}} where {T, N}, x, Is::Vararg{Union{Real, AbstractArray}, N}) where N
    @ GPUArrays ~/julia1/packages/GPUArrays/uiVyU/src/host/indexing.jl:167
  _unsafe_setindex!(::IndexStyle, A::Base.ReshapedArray{<:Any, <:Any, <:Union{Base.LogicalIndex{T, <:GPUArraysCore.AbstractGPUArray}, Base.ReinterpretArray{T, N, <:Any, <:Union{SubArray{<:Any, <:Any, var"#s14"}, var"#s14"}} where var"#s14"<:GPUArraysCore.AbstractGPUArray, Base.ReshapedArray{T, N, <:Union{Base.ReinterpretArray{<:Any, <:Any, <:Any, <:Union{SubArray{<:Any, <:Any, var"#s15"}, var"#s15"}}, SubArray{<:Any, <:Any, var"#s15"}, var"#s15"}} where var"#s15"<:GPUArraysCore.AbstractGPUArray, SubArray{T, N, <:Union{Base.ReinterpretArray{<:Any, <:Any, <:Any, <:Union{SubArray{<:Any, <:Any, var"#s16"}, var"#s16"}}, Base.ReshapedArray{<:Any, <:Any, <:Union{Base.ReinterpretArray{<:Any, <:Any, <:Any, <:Union{SubArray{<:Any, <:Any, var"#s16"}, var"#s16"}}, SubArray{<:Any, <:Any, var"#s16"}, var"#s16"}}, var"#s16"}} where var"#s16"<:GPUArraysCore.AbstractGPUArray, LinearAlgebra.Adjoint{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, LinearAlgebra.Diagonal{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, LinearAlgebra.LowerTriangular{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, LinearAlgebra.Symmetric{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, LinearAlgebra.Transpose{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, LinearAlgebra.Tridiagonal{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, LinearAlgebra.UnitLowerTriangular{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, LinearAlgebra.UnitUpperTriangular{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, LinearAlgebra.UpperTriangular{T, <:GPUArraysCore.AbstractGPUArray{T, N}}, PermutedDimsArray{T, N, <:Any, <:Any, <:GPUArraysCore.AbstractGPUArray}} where {T, N}}, x, Is::Vararg{Union{Real, AbstractArray}, N}) where N
    @ GPUArrays ~/julia1/packages/GPUArrays/uiVyU/src/host/indexing.jl:171
To resolve the ambiguity, try making one of the methods more specific, or adding a new method more specific than any of the existing applicable methods.

Stacktrace:
 [1] _setindex!
   @ ./multidimensional.jl:967 [inlined]
 [2] setindex!
   @ ./abstractarray.jl:1413 [inlined]
 [3] update2!(P::SubArray{Float32, 3, CuArray{…}, Tuple{…}, false})
   @ Main ./REPL[72]:2
 [4] top-level scope
   @ REPL[80]:1
Some type information was truncated. Use `show(err)` to see complete types.

Activity

  1. added and removed on Feb 18, 2025
  2. shreyas-omkar commented on Jan 16, 2026

    @shreyas-omkar
    Member

    This looks interesting. Can I get it assigned?

  3. added a commit that references this issue on May 15, 2026
  4. added
    arraysThe array abstraction: broadcasting, mapreduce, indexing, views, generic linear algebra.
    on Oct 19, 2026
  5. maleadt commented on Oct 19, 2026

    @maleadt
    Member

    Fixed by #680; @views update2!(P[:,:,active]) works on GPUArrays main.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    arraysThe array abstraction: broadcasting, mapreduce, indexing, views, generic linear algebra.

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions