Parallel processing 如何在Julia中同时写入数组的多个索引?
我想在朱莉娅身上看到类似的东西:Parallel processing 如何在Julia中同时写入数组的多个索引?,parallel-processing,julia,Parallel Processing,Julia,我想在朱莉娅身上看到类似的东西: using Distributed addprocs(4) @everywhere arr = Array{Int}(undef, 10) for i = 1:10 @spawn arr[i] = i end 这样做的正确方法是什么?您有以下方法来并行化流程 线程(需要设置JULIA\u NUM\u Threads系统变量) sharedarray using Distributed, SharedArrays addprocs(4) arr =
using Distributed
addprocs(4)
@everywhere arr = Array{Int}(undef, 10)
for i = 1:10
@spawn arr[i] = i
end
这样做的正确方法是什么?您有以下方法来并行化流程
JULIA\u NUM\u Threads
系统变量)
sharedarray
using Distributed, SharedArrays
addprocs(4)
arr = SharedVector{Int}(10)
@sync @distributed for i in 1:10
arr[i] = i
end
请注意,常见的错误是忘记将@sync
放在没有聚合器功能的@distributed
之前(请参见最后一个示例)
using Distributed
addprocs(4)
arr = @distributed (append!) for i in 1:10
[i]
end
sharedarray
?这个例子几乎与这个例子相当(向下滚动一点)。谢谢,我还发现在我的代码中,将@spawn改为Threads@spawn效果也一样好。使用线程并行化与使用分布式多处理并行化完全不同。当您更改为线程时。@spawn
第一个沿@where
行的线程已过时,您仍然需要确保@spawn
ed线程已完成其工作。在我的情况下,我不能使用第一个线程,因为我的函数不是线程安全的。我也无法实现我的代码,因为第二个和第三个似乎更像是一个语法糖,而不像其他代码那样平静。然而,我的代码神奇地工作。我将很快打开另一个帖子,问我是否做得很好,请看一看。非常感谢你!!我使用第三个,因为有时SharedArrays
对我来说似乎不稳定。当计算[i]
花费大量时间(例如10毫秒)时,第三种方法是有意义的。
using Distributed
addprocs(4)
arr = @distributed (append!) for i in 1:10
[i]
end