通过remotecall收集@parallel for-loop的结果

时间:2017-11-29 15:28:16

标签: parallel-processing julia

我使用@parallel for宏来运行一系列参数的模拟。每次运行都会产生一维向量。最后,我想用DataFrame收集结果。

到目前为止,我总是创建一个中间数组并使用vcat减少for循环;然后构建了DataFrame。我认为通过push! remotecall每次计算的结果对主进程也有效。最小的例子看起来像

X=Float64[]

@sync @parallel for i in linspace(1.,10.,10)
        remotecall_fetch(()->push!(X,i),1)
       end

其结果始终是数组X,其中9个不是10个元素。随着更多工作人员的增加,丢弃的元素数量会变大。

这是关于julia-0.6.1。

我以为我已经理解了julia的并行计算结构,但似乎没有。

这种行为的原因是什么?我怎样才能更好,更安全地做到这一点?

1 个答案:

答案 0 :(得分:0)

我怀疑你是在触发竞争条件,但不能说在哪里。

如果你只需要每次迭代返回一个值,我建议你只使用pmap

pmap(linspace(1.,10.,10)) do i
    i
end

否则,如果每次迭代都可以返回多个值,则最好使用RemoteChannels