我使用@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的并行计算结构,但似乎没有。
这种行为的原因是什么?我怎样才能更好,更安全地做到这一点?
答案 0 :(得分:0)
我怀疑你是在触发竞争条件,但不能说在哪里。
如果你只需要每次迭代返回一个值,我建议你只使用pmap
:
pmap(linspace(1.,10.,10)) do i
i
end
否则,如果每次迭代都可以返回多个值,则最好使用RemoteChannel
s。