我使用 @parallel for
宏来运行一系列参数的模拟 . 每次运行都会产生一维向量 . 最后我想收集 DataFrame
的结果 .
到目前为止,我总是创建一个中间数组并使用 vcat
减少for循环;然后构建了 DataFrame
. 我认为它也可以通过 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 回答
我怀疑你是在触发比赛状态,但不知道在哪里 .
如果你只需要每次迭代返回一个值,我建议只使用
pmap
:否则,如果每次迭代都可以返回多个值,那么最好使用RemoteChannels .