7
7
Distributed Arrays for Julia
8
8
9
9
*** NOTE***
10
- Distributed Arrays will only work on Julia v0.4.0 or later.
11
-
12
- ` DArray ` s have been removed from Julia Base library in v0.4 so it is now necessary to import the ` DistributedArrays ` package on all spawned processes.
10
+ This package will only work on Julia v0.7 or later.
13
11
14
12
``` julia
15
13
using DistributedArrays
@@ -154,7 +152,7 @@ following code accomplishes this::
154
152
left = mod (first (I[2 ])- 2 ,size (d,2 ))+ 1
155
153
right = mod ( last (I[2 ]) ,size (d,2 ))+ 1
156
154
157
- old = Array ( Bool, length (I[1 ])+ 2 , length (I[2 ])+ 2 )
155
+ old = Array { Bool} (undef , length (I[1 ])+ 2 , length (I[2 ])+ 2 )
158
156
old[1 , 1 ] = d[top , left] # left side
159
157
old[2 : end - 1 , 1 ] = d[I[1 ], left]
160
158
old[end , 1 ] = d[bot , left]
@@ -318,17 +316,18 @@ This toy example exchanges data with each of its neighbors `n` times.
318
316
319
317
```
320
318
using Distributed
321
- addprocs(8)
322
319
using DistributedArrays
323
- using DistributedArrays.SPMD
320
+ addprocs(8)
321
+ @everywhere using DistributedArrays
322
+ @everywhere using DistributedArrays.SPMD
324
323
325
- d_in=d=DArray(I->fill(myid(), (map(length,I)...)), (nworkers(), 2), workers(), [nworkers(),1])
326
- d_out=ddata()
324
+ d_in=d=DArray(I->fill(myid(), (map(length,I)..., )), (nworkers(), 2), workers(), [nworkers(),1])
325
+ d_out=ddata(); # TODO cannot show
327
326
328
327
# define the function everywhere
329
328
@everywhere function foo_spmd(d_in, d_out, n)
330
329
pids = sort(vec(procs(d_in)))
331
- pididx = findfirst(pids, myid())
330
+ pididx = findfirst(isequal( myid()), pids )
332
331
mylp = d_in[:L]
333
332
localsum = 0
334
333
@@ -352,7 +351,7 @@ d_out=ddata()
352
351
end
353
352
354
353
# run foo_spmd on all workers
355
- spmd(foo_spmd, d_in, d_out, 10)
354
+ spmd(foo_spmd, d_in, d_out, 10, pids=workers() )
356
355
357
356
# print values of d_in and d_out after the run
358
357
println(d_in)
0 commit comments