Skip to content

Commit e20aade

Browse files
committed
remove sum, maximum, minimum to avoid ambigous error
1 parent 821f983 commit e20aade

File tree

5 files changed

+43
-31
lines changed

5 files changed

+43
-31
lines changed

.github/workflows/CI.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ jobs:
1111
strategy:
1212
matrix:
1313
version:
14-
- '1.11.6'
14+
- '1.12.4'
1515
os:
1616
- ubuntu-latest
1717
- macOS-latest

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "ParallelOperations"
22
uuid = "09c1cff2-b94d-4c31-85a1-721512e21c63"
33
authors = ["islent <[email protected]>"]
4-
version = "0.1.2"
4+
version = "0.1.3"
55

66
[deps]
77
Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b"

Readme.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,11 +146,8 @@ scatterto(workers(), a, :b, Main)
146146
```julia
147147
@everywhere workers() x = 1.0
148148

149-
sum(workers(), :x)
150149
allsum(workers(), :x)
151-
maximum(workers(), :x)
152150
allmaximum(workers(), :x)
153-
minimum(workers(), :x)
154151
allminimum(workers(), :x)
155152
```
156153

src/ParallelOperations.jl

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module ParallelOperations
22

33
using Distributed
44

5-
import Base: reduce, sum, maximum, minimum
5+
import Base: reduce
66

77
export
88
sendto, @sendto,
@@ -17,19 +17,24 @@ export
1717
allgather,
1818
allreduce,
1919

20-
sum, allsum,
21-
maximum, allmaximum,
22-
minimum, allminimum
20+
allsum,
21+
allmaximum,
22+
allminimum
2323

2424
# point-to-point
2525

2626
function sendto(p::Int, expr, data, mod::Module = Main)
27-
@async @spawnat(p, Core.eval(mod, Expr(:(=), expr, data)))
27+
remotecall_fetch(p) do
28+
Core.eval(mod, Expr(:(=), expr, data))
29+
end
2830
end
2931

3032
function sendto(p::Int, mod::Module = Main; args...)
31-
data = Dict(nm => val for (nm, val) in args)
32-
@async @spawnat(p, Core.eval(mod, Expr(:(=), :parallel_data, data)))
33+
for (nm, val) in args
34+
remotecall_fetch(p) do
35+
Core.eval(mod, Expr(:(=), nm, val))
36+
end
37+
end
3338
end
3439

3540
function sendto(p::Int, f::Function, expr, mod::Module = Main; args = ())
@@ -61,7 +66,9 @@ macro sendto(p, expr, mod::Symbol = :Main)
6166
end
6267

6368
function getfrom(p::Int, expr, mod::Module = Main)
64-
return fetch(@spawnat(p, Core.eval(mod, expr)))
69+
return remotecall_fetch(p) do
70+
Core.eval(mod, expr)
71+
end
6572
end
6673

6774
macro getfrom(p, obj, mod::Symbol = :Main)
@@ -92,13 +99,13 @@ end
9299

93100
function bcast(pids::Array, f::Function, expr, mod::Module = Main; args...)
94101
@sync for p in pids
95-
@async sendto(p, f, expr, mod; args...)
102+
sendto(p, f, expr, mod; args...)
96103
end
97104
end
98105

99106
function bcast(pids::Array, f::Function, mod::Module = Main; args...)
100107
@sync for p in pids
101-
@async sendto(p, f, mod; args...)
108+
sendto(p, f, mod; args...)
102109
end
103110
end
104111

@@ -166,13 +173,22 @@ function allreduce(f::Function, pids::Array, src_expr, target_expr = src_expr, m
166173
end
167174

168175
# Commonly used functions
169-
sum(pids::Array, expr::Union{Symbol, Expr}, mod::Module = Main) = sum(gather(pids, expr, mod))
170-
allsum(pids::Array, src_expr::Union{Symbol, Expr}, target_expr = src_expr, mod::Module = Main) = bcast(pids, target_expr, sum(pids, src_expr, mod), mod)
176+
function _allsum(pids::Array, expr::Union{Symbol, Expr}, mod::Module = Main)
177+
return Base.sum(gather(pids, expr, mod))
178+
end
171179

172-
maximum(pids::Array, expr, mod::Module = Main) = maximum(gather(pids, expr, mod))
173-
allmaximum(pids::Array, src_expr, target_expr = src_expr, mod::Module = Main) = bcast(pids, target_expr, maximum(pids, src_expr, mod), mod)
180+
allsum(pids::Array, src_expr::Union{Symbol, Expr}, target_expr = src_expr, mod::Module = Main) = bcast(pids, target_expr, _allsum(pids, src_expr, mod), mod)
181+
182+
function _allmaximum(pids::Array, expr, mod::Module = Main)
183+
return Base.maximum(gather(pids, expr, mod))
184+
end
185+
186+
allmaximum(pids::Array, src_expr, target_expr = src_expr, mod::Module = Main) = bcast(pids, target_expr, _allmaximum(pids, src_expr, mod), mod)
187+
188+
function _allminimum(pids::Array, expr, mod::Module = Main)
189+
return Base.minimum(gather(pids, expr, mod))
190+
end
174191

175-
minimum(pids::Array, expr, mod::Module = Main) = minimum(gather(pids, expr, mod))
176-
allminimum(pids::Array, src_expr, target_expr = src_expr, mod::Module = Main) = bcast(pids, target_expr, minimum(pids, src_expr, mod), mod)
192+
allminimum(pids::Array, src_expr, target_expr = src_expr, mod::Module = Main) = bcast(pids, target_expr, _allminimum(pids, src_expr, mod), mod)
177193

178194
end

test/runtests.jl

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -140,37 +140,36 @@ end
140140
# sum
141141
@everywhere pids x = myid()
142142
allsum(pids, :x, :y)
143+
@test getfrom(pids[1], :y) == sum(pids)
144+
143145
allsum(pids, :x)
144-
@test sum(pids, :x) == 4 * sum(pids)
145-
@test sum(pids, :y) == 4 * sum(pids)
146+
@test getfrom(pids[1], :x) == sum(pids)
146147

147148
# maximum
148149
@everywhere pids x = myid()
149-
@test maximum(pids, :x) == maximum(pids)
150150

151151
allmaximum(pids, :x, :y)
152-
@test sum(pids, :y) == 4 * maximum(pids)
152+
@test getfrom(pids[1], :y) == maximum(pids)
153153

154154
allmaximum(pids, :x)
155-
@test sum(pids, :x) == 4 * maximum(pids)
155+
@test getfrom(pids[1], :x) == maximum(pids)
156156

157157
# minimum
158158
@everywhere pids x = myid()
159-
@test minimum(pids, :x) == minimum(pids)
160159

161160
allminimum(pids, :x, :y)
162-
@test sum(pids, :y) == 4 * minimum(pids)
161+
@test getfrom(pids[1], :y) == minimum(pids)
163162

164163
allminimum(pids, :x)
165-
@test sum(pids, :x) == 4 * minimum(pids)
164+
@test getfrom(pids[1], :x) == minimum(pids)
166165
end
167166

168167
@everywhere fun() = 123
169168
@everywhere fun2() = 4
170169

171170
@testset "function" begin
172-
sendto(2, fun)
173-
@test getfrom(2, :(fun())) == 123
171+
sendto(pids[1], fun)
172+
@test getfrom(pids[1], :(fun())) == 123
174173

175174
bcast(pids, fun2)
176175
@test sum(gather(pids, :(fun2()))) == 16

0 commit comments

Comments
 (0)