JuliaParallel / JuliaParallel/DistributedArrays.jl

Broadcasting is broken with Darrays having differing ndims

Abierto
#228 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Julia
Estrellas
205
Forks
34
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

```julia
julia> d = dzeros((3,3))
3×3 DArray{Float64,2,Array{Float64,2}}:
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0

julia> d2 = dzeros((3,3,1))
3×3×1 DArray{Float64,3,Array{Float64,3}}:
[:, :, 1] =
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0

julia> d .+ d2
ERROR: MethodError: no method matching Base.Broadcast.BroadcastStyle(::Type{Base.Broadcast.DefaultArrayStyle{2}}, ::Type{Base.Broadcast.DefaultArrayStyle{3}})
Closest candidates are:
Base.Broadcast.BroadcastStyle(::Type{T}) where T at broadcast.jl:103
Stacktrace:
[1] Base.Broadcast.BroadcastStyle(::DistributedArrays.DArrayStyle{Base.Broadcast.DefaultArrayStyle{2}}, ::DistributedArrays.DArrayStyle{Base.Broadcast.DefaultArrayStyle{3}}) at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/broadcast.jl:21
[2] result_style(::DistributedArrays.DArrayStyle{Base.Broadcast.DefaultArrayStyle{2}}, ::DistributedArrays.DArrayStyle{Base.Broadcast.DefaultArrayStyle{3}}) at ./broadcast.jl:445
[3] combine_styles(::DArray{Float64,2,Array{Float64,2}}, ::DArray{Float64,3,Array{Float64,3}}) at ./broadcast.jl:421
[4] broadcasted(::Function, ::DArray{Float64,2,Array{Float64,2}}, ::DArray{Float64,3,Array{Float64,3}}) at ./broadcast.jl:1263
[5] top-level scope at REPL[79]:1
```

Another one with `reshape`:

```julia
julia> d .+ reshape(d, size(d)..., 1)
ERROR: TaskFailedException:
setindex! not defined for DArray{Float64,3,Array{Float64,3}}
error(::String, ::Type{T} where T) at ./error.jl:42
error_if_canonical_setindex(::IndexCartesian, ::DArray{Float64,3,Array{Float64,3}}, ::Int64, ::Int64, ::Int64) at ./abstractarray.jl:1163
setindex! at ./abstractarray.jl:1152 [inlined]
_setindex! at ./abstractarray.jl:1183 [inlined]
setindex! at ./abstractarray.jl:1153 [inlined]
macro expansion at ./multidimensional.jl:772 [inlined]
macro expansion at ./cartesian.jl:64 [inlined]
macro expansion at ./multidimensional.jl:767 [inlined]
_unsafe_getindex!(::DArray{Float64,3,Array{Float64,3}}, ::Base.ReshapedArray{Float64,3,DArray{Float64,2,Array{Float64,2}},Tuple{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}}}, ::UnitRange{Int64}, ::UnitRange{Int64}, ::UnitRange{Int64}) at ./multidimensional.jl:762
_unsafe_getindex(::IndexCartesian, ::Base.ReshapedArray{Float64,3,DArray{Float64,2,Array{Float64,2}},Tuple{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}}}, ::UnitRange{Int64}, ::UnitRange{Int64}, ::UnitRange{Int64}) at ./multidimensional.jl:757
_getindex(::IndexCartesian, ::Base.ReshapedArray{Float64,3,DArray{Float64,2,Array{Float64,2}},Tuple{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}}}, ::UnitRange{Int64}, ::UnitRange{Int64}, ::Vararg{UnitRange{Int64},N} where N) at ./multidimensional.jl:743
getindex(::Base.ReshapedArray{Float64,3,DArray{Float64,2,Array{Float64,2}},Tuple{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}}}, ::UnitRange{Int64}, ::UnitRange{Int64}, ::UnitRange{Int64}) at ./abstractarray.jl:1060
(::DistributedArrays.var"#72#74"{Base.ReshapedArray{Float64,3,DArray{Float64,2,Array{Float64,2}},Tuple{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}}},Array{Tuple{UnitRange{Int64},UnitRange{Int64},UnitRange{Int64}},3}})(::CartesianIndex{3}) at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/darray.jl:548
localpart(::DistributedArrays.DestinationSerializer) at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/serialize.jl:83
#73 at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/darray.jl:550 [inlined]
construct_localparts(::DistributedArrays.var"#73#75"{DistributedArrays.DestinationSerializer}, ::Tuple{Int64,Int64}, ::Tuple{Int64,Int64,Int64}, ::Array{Int64,3}, ::Array{Tuple{UnitRange{Int64},UnitRange{Int64},UnitRange{Int64}},3}, ::Array{Array{Int64,1},1}; T::Nothing, A::Nothing) at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/darray.jl:118
construct_localparts at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/darray.jl:118 [inlined]
#137 at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/Distributed/src/remotecall.jl:354 [inlined]
run_work_thunk(::Distributed.var"#137#138"{typeof(DistributedArrays.construct_localparts),Tuple{DistributedArrays.var"#73#75"{DistributedArrays.DestinationSerializer},Tuple{Int64,Int64},Tuple{Int64,Int64,Int64},Array{Int64,3},Array{Tuple{UnitRange{Int64},UnitRange{Int64},UnitRange{Int64}},3},Array{Array{Int64,1},1}},Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}}, ::Bool) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/Distributed/src/process_messages.jl:79
remotecall_fetch(::Function, ::Distributed.LocalProcess, ::Function, ::Vararg{Any,N} where N; kwargs::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/Distributed/src/remotecall.jl:379
remotecall_fetch(::Function, ::Distributed.LocalProcess, ::Function, ::Vararg{Any,N} where N) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/Distributed/src/remotecall.jl:379
remotecall_fetch(::Function, ::Int64, ::Function, ::Vararg{Any,N} where N; kwargs::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/Distributed/src/remotecall.jl:421
remotecall_fetch at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/Distributed/src/remotecall.jl:421 [inlined]
macro expansion at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/darray.jl:88 [inlined]
(::DistributedArrays.var"#1#3"{Tuple{Int64,Int64},DistributedArrays.var"#73#75"{DistributedArrays.DestinationSerializer},Tuple{Int64,Int64,Int64},Array{Int64,3},Array{Tuple{UnitRange{Int64},UnitRange{Int64},UnitRange{Int64}},3},Array{Array{Int64,1},1},Array{DataType,1},Int64})() at ./task.jl:356
Stacktrace:
[1] remotecall_fetch(::Function, ::Distributed.LocalProcess, ::Function, ::Vararg{Any,N} where N; kwargs::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/Distributed/src/remotecall.jl:380
[2] remotecall_fetch(::Function, ::Distributed.LocalProcess, ::Function, ::Vararg{Any,N} where N) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/Distributed/src/remotecall.jl:379
[3] remotecall_fetch(::Function, ::Int64, ::Function, ::Vararg{Any,N} where N; kwargs::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/Distributed/src/remotecall.jl:421
[4] remotecall_fetch at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/Distributed/src/remotecall.jl:421 [inlined]
[5] macro expansion at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/darray.jl:88 [inlined]
[6] (::DistributedArrays.var"#1#3"{Tuple{Int64,Int64},DistributedArrays.var"#73#75"{DistributedArrays.DestinationSerializer},Tuple{Int64,Int64,Int64},Array{Int64,3},Array{Tuple{UnitRange{Int64},UnitRange{Int64},UnitRange{Int64}},3},Array{Array{Int64,1},1},Array{DataType,1},Int64})() at ./task.jl:356
Stacktrace:
[1] sync_end(::Channel{Any}) at ./task.jl:314
[2] macro expansion at ./task.jl:333 [inlined]
[3] DArray(::Tuple{Int64,Int64}, ::Function, ::Tuple{Int64,Int64,Int64}, ::Array{Int64,3}, ::Array{Tuple{UnitRange{Int64},UnitRange{Int64},UnitRange{Int64}},3}, ::Array{Array{Int64,1},1}) at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/darray.jl:83
[4] DArray(::Function, ::Tuple{Int64,Int64,Int64}, ::Array{Int64,1}, ::Array{Int64,1}) at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/darray.jl:177
[5] distribute(::Base.ReshapedArray{Float64,3,DArray{Float64,2,Array{Float64,2}},Tuple{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}}}; procs::Array{Int64,1}, dist::Array{Int64,1}) at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/darray.jl:550
[6] distribute(::Base.ReshapedArray{Float64,3,DArray{Float64,2,Array{Float64,2}},Tuple{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}}}) at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/darray.jl:543
[7] _bcdistribute at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/broadcast.jl:133 [inlined]
[8] bcdistribute at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/broadcast.jl:129 [inlined]
[9] bcdistribute_args at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/broadcast.jl:137 [inlined]
[10] bcdistribute_args at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/broadcast.jl:136 [inlined]
[11] bcdistribute at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/broadcast.jl:126 [inlined]
[12] copy at /home/jishnu/.julia/packages/DistributedArrays/3FSDt/src/broadcast.jl:93 [inlined]
[13] materialize(::Base.Broadcast.Broadcasted{DistributedArrays.DArrayStyle{Base.Broadcast.DefaultArrayStyle{2}},Nothing,typeof(+),Tuple{DArray{Float64,2,Array{Float64,2}},Base.ReshapedArray{Float64,3,DArray{Float64,2,Array{Float64,2}},Tuple{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}}}}}) at ./broadcast.jl:837
[14] top-level scope at REPL[80]:1
```

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Start by reproducing both failures from the examples, then inspect the broadcast paths in src/broadcast.jl and the DArray construction and distribution paths in src/darray.jl named by the stack traces. Done means broadcasting works between Darrays with differing dimensions, including the reshape case, without MethodError or setindex! failures.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
julia
Área
distributed-systems
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
42/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.