# Multi-dimensional SharedArrays.jl don't work in @distributed loops

**URL:** <https://discourse.julialang.org/t/multi-dimensional-sharedarrays-jl-dont-work-in-distributed-loops/19944>\
**Category:** Julia at Scale\
**Tags:** distributed\
**Created:** [January 22, 2019, 8:21pm UTC](https://discourse.julialang.org/t/multi-dimensional-sharedarrays-jl-dont-work-in-distributed-loops/19944 "2019-01-22T20:21:49Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![michaelkyu](https://avatars.discourse-cdn.com/v4/letter/m/e19adc/32.png) [@michaelkyu](https://discourse.julialang.org/u/michaelkyu)\
**Post date:** [January 22, 2019, 8:21pm UTC](https://discourse.julialang.org/t/multi-dimensional-sharedarrays-jl-dont-work-in-distributed-loops/19944/1 "2019-01-22T20:21:49Z")

</div>

I’m following the [documentation](https://docs.julialang.org/en/v1/manual/parallel-computing/index.html#Parallel-Map-and-Loops-1) for parallel code in Julia v1.0. The simple example in the docs for using a 1D SharedArrays and @distributed does execute correctly for me. However, if I modify the example to make the SharedArray be 2D instead of 1D, it no longer works correctly.

```julia
using SharedArrays, Distributed

a = SharedArray{Float64}(5,5)
@distributed for i = 1:5
    a[i,:] = i
end
a

```

5×5 SharedArray{Float64,2}:  
0.0 0.0 0.0 0.0 0.0  
0.0 0.0 0.0 0.0 0.0  
0.0 0.0 0.0 0.0 0.0  
0.0 0.0 0.0 0.0 0.0  
0.0 0.0 0.0 0.0 0.0

I found that explicitly doing the assignment with another inner for loop will work correctly. This is inconvenient though ☹

```julia
a = SharedArray{Float64}(5, 5)
@distributed for i = 1:5
    for j in 1:5
        a[i,j] = i
    end
end
a

```

5×5 SharedArray{Float64,2}:  
1.0 1.0 1.0 1.0 1.0  
2.0 2.0 2.0 2.0 2.0  
3.0 3.0 3.0 3.0 3.0  
4.0 4.0 4.0 4.0 4.0  
5.0 5.0 5.0 5.0 5.0

---

<div class="post-metadata">

**Author:** ![simeonschaub](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simeonschaub/32/216566_2.png) [@simeonschaub](https://discourse.julialang.org/u/simeonschaub)\
**Post date:** [January 22, 2019, 10:17pm UTC](https://discourse.julialang.org/t/multi-dimensional-sharedarrays-jl-dont-work-in-distributed-loops/19944/2 "2019-01-22T22:17:01Z")

</div>

I think what you’re looking for is:

```julia
using SharedArrays, Distributed

a = SharedArray{Float64}(5,5)
@distributed for i = 1:5
    a[i,:] .= i
end
a

```

Right now you are trying to assign a scalar value to a slice, which is actually a vector. You could also write `a[i,:] = fill(i, 5)`, which would create an Array with 5 elements, but using broadcasting is neater and doesn’t allocate a whole Array each time.

---

<div class="post-metadata">

**Author:** ![michaelkyu](https://avatars.discourse-cdn.com/v4/letter/m/e19adc/32.png) [@michaelkyu](https://discourse.julialang.org/u/michaelkyu)\
**Post date:** [January 23, 2019, 4:04pm UTC](https://discourse.julialang.org/t/multi-dimensional-sharedarrays-jl-dont-work-in-distributed-loops/19944/3 "2019-01-23T16:04:12Z")

</div>

That works. Thanks!
