Skip to content
This repository has been archived by the owner on Mar 12, 2021. It is now read-only.

Assigning a number to a CuArray slice via broadcasting fails #386

Closed
ali-ramadhan opened this issue Aug 5, 2019 · 3 comments
Closed

Assigning a number to a CuArray slice via broadcasting fails #386

ali-ramadhan opened this issue Aug 5, 2019 · 3 comments
Labels

Comments

@ali-ramadhan
Copy link

It seems that assigning a number to a CuArray slice via broadcast fails now. It must have worked in the past (probably in v1.0.2) one of my tests just broke but maybe this is the new intended behavior.

I'm using CuArrays v1.1.0, CUDAnative v2.2.1, and CUDAdrv v3.1.0.

Minimal working example:

julia> C = rand(2, 2, 2) |> CuArray
2×2×2 CuArray{Float64,3}:
[:, :, 1] =
 0.0908594  0.995228
 0.27418    0.945454
​
[:, :, 2] =
 0.4299  0.600029
 0.8766  0.601922
​
julia> C[:, 2, :] .= 100
ERROR: MethodError: no method matching CuArray(::Int64)
Closest candidates are:
  CuArray(::CuArrays.CUSOLVER.CuQRPackedQ) at /home/gridsan/aramadhan/.julia/packages/CuArrays/eFBar/src/solver/highlevel.jl:22
  CuArray(::AbstractArray{T,N}) where {T, N} at /home/gridsan/aramadhan/.julia/packages/CuArrays/eFBar/src/array.jl:116
  CuArray(::LinearAlgebra.UniformScaling, ::Tuple{Int64,Int64}) at /home/gridsan/aramadhan/.julia/packages/GPUArrays/joKVJ/src/construction.jl:30
  ...
Stacktrace:
 [1] map(::Type, ::Tuple{Base.Slice{Base.OneTo{Int64}},Int64,Base.Slice{Base.OneTo{Int64}}}) at ./tuple.jl:167
 [2] adapt_structure(::CUDAnative.Adaptor, ::SubArray{Float64,2,CuArray{Float64,3},Tuple{Base.Slice{Base.OneTo{Int64}},Int64,Base.Slice{Base.OneTo{Int64}}},false}) at /home/gridsan/aramadhan/.julia/packages/CuArrays/eFBar/src/subarray.jl:61
 [3] adapt(::CUDAnative.Adaptor, ::SubArray{Float64,2,CuArray{Float64,3},Tuple{Base.Slice{Base.OneTo{Int64}},Int64,Base.Slice{Base.OneTo{Int64}}},false}) at /home/gridsan/aramadhan/.julia/packages/Adapt/aeQPS/src/Adapt.jl:6
 [4] cudaconvert(::SubArray{Float64,2,CuArray{Float64,3},Tuple{Base.Slice{Base.OneTo{Int64}},Int64,Base.Slice{Base.OneTo{Int64}}},false}) at /home/gridsan/aramadhan/.julia/packages/CUDAnative/nItlk/src/execution.jl:209
 [5] _broadcast_getindex_evalf at ./broadcast.jl:578 [inlined]
 [6] _broadcast_getindex at ./broadcast.jl:551 [inlined]
 [7] (::getfield(Base.Broadcast, Symbol("##19#20")){Base.Broadcast.Broadcasted{Base.Broadcast.Style{Tuple},Nothing,typeof(CUDAnative.cudaconvert),Tuple{Tuple{CuArrays.CuKernelState,SubArray{Float64,2,CuArray{Float64,3},Tuple{Base.Slice{Base.OneTo{Int64}},Int64,Base.Slice{Base.OneTo{Int64}}},false},Base.Broadcast.Broadcasted{Nothing,Tuple{Base.OneTo{Int64},Base.OneTo{Int64}},typeof(identity),Tuple{Int64}}}}}})(::Int64) at ./broadcast.jl:953
 [8] ntuple at ./tuple.jl:161 [inlined]
 [9] copy at ./broadcast.jl:953 [inlined]
 [10] materialize at ./broadcast.jl:753 [inlined]
 [11] macro expansion at /home/gridsan/aramadhan/.julia/packages/CUDAnative/nItlk/src/execution.jl:172 [inlined]
 [12] macro expansion at ./gcutils.jl:87 [inlined]
 [13] macro expansion at /home/gridsan/aramadhan/.julia/packages/CUDAnative/nItlk/src/execution.jl:171 [inlined]
 [14] _gpu_call(::CuArrays.CuArrayBackend, ::Function, ::SubArray{Float64,2,CuArray{Float64,3},Tuple{Base.Slice{Base.OneTo{Int64}},Int64,Base.Slice{Base.OneTo{Int64}}},false}, ::Tuple{SubArray{Float64,2,CuArray{Float64,3},Tuple{Base.Slice{Base.OneTo{Int64}},Int64,Base.Slice{Base.OneTo{Int64}}},false},Base.Broadcast.Broadcasted{Nothing,Tuple{Base.OneTo{Int64},Base.OneTo{Int64}},typeof(identity),Tuple{Int64}}}, ::Tuple{Tuple{Int64},Tuple{Int64}}) at /home/gridsan/aramadhan/.julia/packages/CuArrays/eFBar/src/gpuarray_interface.jl:60
 [15] gpu_call(::Function, ::SubArray{Float64,2,CuArray{Float64,3},Tuple{Base.Slice{Base.OneTo{Int64}},Int64,Base.Slice{Base.OneTo{Int64}}},false}, ::Tuple{SubArray{Float64,2,CuArray{Float64,3},Tuple{Base.Slice{Base.OneTo{Int64}},Int64,Base.Slice{Base.OneTo{Int64}}},false},Base.Broadcast.Broadcasted{Nothing,Tuple{Base.OneTo{Int64},Base.OneTo{Int64}},typeof(identity),Tuple{Int64}}}, ::Int64) at /home/gridsan/aramadhan/.julia/packages/GPUArrays/joKVJ/src/abstract_gpu_interface.jl:151
 [16] gpu_call(::Function, ::SubArray{Float64,2,CuArray{Float64,3},Tuple{Base.Slice{Base.OneTo{Int64}},Int64,Base.Slice{Base.OneTo{Int64}}},false}, ::Tuple{SubArray{Float64,2,CuArray{Float64,3},Tuple{Base.Slice{Base.OneTo{Int64}},Int64,Base.Slice{Base.OneTo{Int64}}},false},Base.Broadcast.Broadcasted{Nothing,Tuple{Base.OneTo{Int64},Base.OneTo{Int64}},typeof(identity),Tuple{Int64}}}) at /home/gridsan/aramadhan/.julia/packages/GPUArrays/joKVJ/src/abstract_gpu_interface.jl:128
 [17] copyto! at /home/gridsan/aramadhan/.julia/packages/GPUArrays/joKVJ/src/broadcast.jl:48 [inlined]
 [18] copyto! at /home/gridsan/aramadhan/.julia/packages/GPUArrays/joKVJ/src/broadcast.jl:60 [inlined]
 [19] materialize!(::SubArray{Float64,2,CuArray{Float64,3},Tuple{Base.Slice{Base.OneTo{Int64}},Int64,Base.Slice{Base.OneTo{Int64}}},false}, ::Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{0},Nothing,typeof(identity),Tuple{Int64}}) at ./broadcast.jl:756
 [20] top-level scope at none:0
@maleadt
Copy link
Member

maleadt commented Aug 23, 2019

Seems to work here:

julia> C = rand(2, 2, 2) |> CuArray
2×2×2 CuArray{Float64,3}:
[:, :, 1] =
 0.142639  0.148232
 0.628564  0.232154

[:, :, 2] =
 0.441277  0.874009 
 0.899314  0.0589816

julia> C[:, 2, :] .= 100
2×2 view(::CuArray{Float64,3}, :, 2, :) with eltype Float64:
 100.0  100.0
 100.0  100.0

something that got fixed on master maybe? I'll be tagging a release soon.

@maleadt maleadt closed this as completed Aug 23, 2019
@maleadt
Copy link
Member

maleadt commented Aug 23, 2019

Yeah that's #382

@ali-ramadhan
Copy link
Author

Ah awesome, thank you! I should have tried master before opening an issue.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

2 participants