77Distributed Arrays for Julia
88
99*** 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.
1311
1412``` julia
15- @everywhere using DistributedArrays
13+ using DistributedArrays
1614```
1715
1816Distributed Arrays
@@ -76,12 +74,12 @@ Indexing via symbols is used for this, specifically symbols `:L`,`:LP`,`:l`,`:lp
7674are all equivalent. For example, ` d[:L] ` returns the localpart of ` d `
7775while ` d[:L]=v ` sets ` v ` as the localpart of ` d ` .
7876
79- * ` localindexes (a::DArray)` gives a tuple of the index ranges owned by the
77+ * ` localindices (a::DArray)` gives a tuple of the index ranges owned by the
8078local process.
8179
8280* ` convert(Array, a::DArray) ` brings all the data to the local process.
8381
84- Indexing a ` DArray ` (square brackets) with ranges of indexes always
82+ Indexing a ` DArray ` (square brackets) with ranges of indices always
8583creates a ` SubArray ` , not copying any data.
8684
8785
@@ -154,7 +152,7 @@ following code accomplishes this::
154152 left = mod (first (I[2 ])- 2 ,size (d,2 ))+ 1
155153 right = mod ( last (I[2 ]) ,size (d,2 ))+ 1
156154
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 )
158156 old[1 , 1 ] = d[top , left] # left side
159157 old[2 : end - 1 , 1 ] = d[I[1 ], left]
160158 old[end , 1 ] = d[bot , left]
@@ -205,7 +203,7 @@ seen in this simple example:
205203``` julia
206204julia> addprocs (8 );
207205
208- julia> @everywhere using DistributedArrays
206+ julia> using DistributedArrays
209207
210208julia> A = fill (1.1 , (100 ,100 ));
211209
@@ -227,7 +225,7 @@ Garbage Collection and DArrays
227225------------------------------
228226
229227When a DArray is constructed (typically on the master process), the returned DArray objects stores information on how the
230- array is distributed, which procesor holds which indexes and so on. When the DArray object
228+ array is distributed, which procesor holds which indices and so on. When the DArray object
231229on the master process is garbage collected, all particpating workers are notified and
232230localparts of the DArray freed on each worker.
233231
@@ -317,18 +315,19 @@ Example
317315This toy example exchanges data with each of its neighbors ` n ` times.
318316
319317```
318+ using Distributed
320319using DistributedArrays
321320addprocs(8)
322- @everywhere importall DistributedArrays
323- @everywhere importall DistributedArrays.SPMD
321+ @everywhere using DistributedArrays
322+ @everywhere using DistributedArrays.SPMD
324323
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();
327326
328327# define the function everywhere
329328@everywhere function foo_spmd(d_in, d_out, n)
330329 pids = sort(vec(procs(d_in)))
331- pididx = findfirst(pids, myid())
330+ pididx = findfirst(isequal( myid()), pids )
332331 mylp = d_in[:L]
333332 localsum = 0
334333
@@ -352,7 +351,7 @@ d_out=ddata()
352351end
353352
354353# 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() )
356355
357356# print values of d_in and d_out after the run
358357println(d_in)
0 commit comments