Skip to content

Issue with OffsetArrays #186

Description

@r-barnes

I was getting nervous about the communication costs of being imprecise with communications outside of the localpart of the array, so I figured I'd build a halo exchange system by combining OffsetArrays and DistributedArrays.

I intended for that to look like the following, where each array has a 4x4 block of purely local data and a surrounding 1-cell halo to cache remote data pulled using DistributedArrays.

@everywhere using DistributedArrays
@everywhere using OffsetArrays

r1  = @spawnat 2 OffsetArray(zeros(6,6), 0:5, 0:5)
r2  = @spawnat 3 OffsetArray(zeros(6,6), 0:5, 0:5)
r3  = @spawnat 4 OffsetArray(zeros(6,6), 0:5, 0:5)
r4  = @spawnat 5 OffsetArray(zeros(6,6), 0:5, 0:5)
ras = [r1 r2; r3 r4]
D   = DArray(ras)

Unfortunately, when I try to run this, I get:

julia> D   = DArray(ras)
ERROR: MethodError: no method matching OffsetArray{Float64,2,Array{Float64,2}}(::Array{Float64,2})
Closest candidates are:
  OffsetArray{Float64,2,Array{Float64,2}}(::Any, ::Any) where {T, N, AA<:AbstractArray} at /home/rick/.julia/packages/OffsetArrays/ICRTb/src/OffsetArrays.jl:10
Stacktrace:
 [1] empty_localpart(::Type, ::Int64, ::Type) at /home/rick/.julia/packages/DistributedArrays/XV7NS/src/darray.jl:66
 [2] macro expansion at ./task.jl:264 [inlined]
 [3] macro expansion at /home/rick/.julia/packages/DistributedArrays/XV7NS/src/darray.jl:84 [inlined]
 [4] macro expansion at ./task.jl:244 [inlined]
 [5] DArray(::Tuple{Int64,Int64}, ::Array{Future,2}, ::Tuple{Int64,Int64}, ::Array{Int64,2}, ::Array{Tuple{UnitRange{Int64},UnitRange{Int64}},2}, ::Array{Array{Int64,1},1}) at /home/rick/.julia/packages/DistributedArrays/XV7NS/src/darray.jl:82
 [6] macro expansion at ./task.jl:266 [inlined]
 [7] macro expansion at /home/rick/.julia/packages/DistributedArrays/XV7NS/src/darray.jl:194 [inlined]
 [8] macro expansion at ./task.jl:244 [inlined]
 [9] DArray(::Array{Future,2}) at /home/rick/.julia/packages/DistributedArrays/XV7NS/src/darray.jl:192
 [10] top-level scope at none:0

which doesn't seem like an issue with OffsetArrays because using SparseArrays in an analogous way produces no problems:

@everywhere using DistributedArrays
@everywhere using SparseArrays

r1  = @spawnat 2 sparse(zeros(6,6))
r2  = @spawnat 3 sparse(zeros(6,6))
r3  = @spawnat 4 sparse(zeros(6,6))
r4  = @spawnat 5 sparse(zeros(6,6))
ras = [r1 r2; r3 r4]
D   = DArray(ras)

Sadly, I'm not familiar enough with Julia to know why the interaction of OffsetArrays and DistributedArrays is problematic.

I've got:

  [aaf54ef3] DistributedArrays v0.5.1
  [6fe1bfb0] OffsetArrays v0.8.1

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions