【发布时间】:2016-03-02 15:27:24
【问题描述】:
我需要在多个工作人员上并行执行某个任务。 为此,我需要所有工作人员都可以访问存储数据的矩阵。
我认为数据矩阵可以实现为共享数组,以最大限度地减少数据移动。
为了让我开始使用共享数组,我正在尝试以下非常简单的示例,它给了我,我认为是意外的行为:
julia -p 2
# the data matrix
D = SharedArray(Float64, 2, 3)
# initialise the data matrix with dummy values
for ii=1:length(D)
D[ii] = rand()
end
# Define some kind of dummy computation involving the shared array
f = x -> x + sum(D)
# call function on worker
@time fetch(@spawnat 2 f(1.0))
最后一个命令给了我以下错误:
ERROR: On worker 2:
UndefVarError: D not defined
in anonymous at none:1
in anonymous at multi.jl:1358
in anonymous at multi.jl:904
in run_work_thunk at multi.jl:645
in run_work_thunk at multi.jl:654
in anonymous at task.jl:58
in remotecall_fetch at multi.jl:731
in call_on_owner at multi.jl:777
in fetch at multi.jl:795
我认为共享数组 D 应该对所有工作人员可见? 我显然缺少一些基本的东西。提前致谢。
【问题讨论】:
标签: arrays parallel-processing julia