GPUArrays.jl icon indicating copy to clipboard operation
GPUArrays.jl copied to clipboard

Adding @views yields ambiguity for certain assignment of mutable CuArray

Open cyanescent opened this issue 8 months ago • 0 comments

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.

cyanescent avatar Feb 17 '25 13:02 cyanescent