Skip to content

Commit 1241687

Browse files
authored
Merge pull request #156 from traktofon/for07
Update for julia-0.7
2 parents 76d8be4 + 810e142 commit 1241687

File tree

14 files changed

+577
-415
lines changed

14 files changed

+577
-415
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ os:
33
- linux
44
- osx
55
julia:
6-
- 0.6
6+
- 0.7
77
- nightly
88
matrix:
99
# allow_failures:

README.md

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@
77
Distributed 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

1816
Distributed Arrays
@@ -76,12 +74,12 @@ Indexing via symbols is used for this, specifically symbols `:L`,`:LP`,`:l`,`:lp
7674
are all equivalent. For example, `d[:L]` returns the localpart of `d`
7775
while `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
8078
local 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
8583
creates 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
206204
julia> addprocs(8);
207205

208-
julia> @everywhere using DistributedArrays
206+
julia> using DistributedArrays
209207

210208
julia> A = fill(1.1, (100,100));
211209

@@ -227,7 +225,7 @@ Garbage Collection and DArrays
227225
------------------------------
228226

229227
When 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
231229
on the master process is garbage collected, all particpating workers are notified and
232230
localparts of the DArray freed on each worker.
233231

@@ -317,18 +315,19 @@ Example
317315
This toy example exchanges data with each of its neighbors `n` times.
318316

319317
```
318+
using Distributed
320319
using DistributedArrays
321320
addprocs(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()
352351
end
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
358357
println(d_in)

REQUIRE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
julia 0.6
1+
julia 0.7-beta
22
Primes

src/DistributedArrays.jl

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@ __precompile__()
22

33
module DistributedArrays
44

5-
importall Base
5+
using Distributed
6+
using Serialization
7+
using LinearAlgebra
8+
9+
import Base: +, -, *, div, mod, rem, &, |, xor
610
import Base.Callable
7-
import Base.BLAS: axpy!
11+
import LinearAlgebra: axpy!, dot, norm
812

9-
using Primes
10-
using Primes: factor
13+
import Primes
14+
import Primes: factor
1115

1216
# DArray exports
1317
export DArray, SubDArray, SubOrDArray, @DArray
14-
export dzeros, dones, dfill, drand, drandn, distribute, localpart, localindexes, ppeval
18+
export dzeros, dones, dfill, drand, drandn, distribute, localpart, localindices, ppeval
1519

1620
# non-array distributed data
1721
export ddata, gather

src/core.jl

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ release_localpart(id::Tuple) = (delete!(registry, id); nothing)
1717
release_localpart(d) = release_localpart(d.id)
1818

1919
function close_by_id(id, pids)
20-
# @schedule println("Finalizer for : ", id)
20+
# @async println("Finalizer for : ", id)
2121
global refs
2222
@sync begin
2323
for p in pids
@@ -31,10 +31,10 @@ function close_by_id(id, pids)
3131
nothing
3232
end
3333

34-
function close(d::DArray)
35-
# @schedule println("close : ", d.id, ", object_id : ", object_id(d), ", myid : ", myid() )
34+
function Base.close(d::DArray)
35+
# @async println("close : ", d.id, ", object_id : ", object_id(d), ", myid : ", myid() )
3636
if (myid() == d.id[1]) && d.release
37-
@schedule close_by_id(d.id, d.pids)
37+
@async close_by_id(d.id, d.pids)
3838
d.release = false
3939
end
4040
nothing
@@ -55,7 +55,8 @@ end
5555
5656
Get the vector of processes storing pieces of DArray `d`.
5757
"""
58-
Base.procs(d::DArray) = d.pids
58+
Distributed.procs(d::DArray) = d.pids
59+
Distributed.procs(d::SubDArray) = procs(parent(d))
5960

6061
"""
6162
localpart(A)

0 commit comments

Comments
 (0)