【发布时间】:2017-11-30 05:29:42
【问题描述】:
我使用@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 的并行计算结构,但似乎没有。
这种行为的原因是什么?我怎样才能做得更好、更安全?
【问题讨论】: