首页 文章

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

提问于
浏览
0

我使用 @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 回答

  • 0

    我怀疑你是在触发比赛状态,但不知道在哪里 .

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

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

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

相关问题