julia @parallel for循环 - 如何更新字典(数组)并返回结果?

时间:2017-04-26 01:28:19

标签: parallel-processing julia

我想知道如何在函数中更新@parallel for循环中的数组并返回结果。这是一个简单的例子:

addprocs(2)

function parallel_func()
   a = Dict{Int64, Int64}()
   @sync @parallel for i in 1:10
      a[i] = 2*i
   end
   println(length(a))
   return a
end 

a = parallel_func()
println(length(a)) 

此处,a在使用@parallel宏运行for循环后为空。 我知道@parallel会复制每个工作人员的数据并且不会触及原始数据,但我认为可能有办法从所有工作人员那里获取数据。我很感激你是否可以评论任何替代方案以加快for循环,就像上面的例子一样。

1 个答案:

答案 0 :(得分:0)

@parallel有回报。您可以通过缩小vcathcat

来返回数组
arr = @sync @parallel (vcat) for i in 1:10
  ...
  element
end

您可以使用Pair个数组并从中构建Dict

修改

我注意到你实际上想要改变一个数组。在这种情况下,您应该使用SharedArrayDistributedArray