tib*_*ibL 3 parallel-processing julia
在模拟分布式推理的并行应用程序中,我希望有一个"初始化步骤",其中所有"从属"从"主"接收一些初始信息然后开始他们的任务.
目前我有一个基于该sendTo函数的工作实现(这里的代码在堆栈溢出时被发现),但我不认为它保证了worker在收到初始对象之前不会启动它的任务.
这是一个粗糙的MWE
function sendTo(p::Int; args...)
for (nm, val) in args
@spawnat(p, eval(Main, Expr(:(=), nm, val)))
end
end
a = 5
addprocs(4)
[sendTo(worker,a=a+randn()) for worker in workers()]
@everywhere begin
println(a)
end
Run Code Online (Sandbox Code Playgroud)
上面的"工作",但我如何确定@everywhere在工作人员收到定义之前,块中的命令没有执行a?
Rmk:对于我正在使用的上下文,我想保留两个不同的块,一个用于传播数据,另一个用于处理数据.
其他rmk:道歉,如果这是微不足道的,我对处理并行性很新(对Julia也很新)
function sendTo(p::Int; args...)
r = []
for (nm, val) in args
s = @spawnat(p, eval(Main, Expr(:(=), nm, val)))
vcat([s],r)
end
end
#...
[fetch(r) for r in [sendTo(worker,a=a+randn()) for worker in workers()]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
691 次 |
| 最近记录: |