JuliaGPU / JuliaGPU/GPUArrays.jl

Adding @views yields ambiguity for certain assignment of mutable CuArray

Open
#587 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Julia
Stars
450
Forks
104
Avg merge
1d 4h
Merged PRs (30d)
10

Description

This may be similar to #554

MWE:

```julia
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
```

```julia-REPL
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.
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.