我想知道如何在函数中更新@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循环,就像上面的例子一样。
答案 0 :(得分:0)
@parallel
有回报。您可以通过缩小vcat
或hcat
:
arr = @sync @parallel (vcat) for i in 1:10
...
element
end
您可以使用Pair
个数组并从中构建Dict
。
我注意到你实际上想要改变一个数组。在这种情况下,您应该使用SharedArray
或DistributedArray
。