Skip to content

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

Open
@cyanescent

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions