对于初学者来说,我不得不说我对并行计算是完全陌生的(并且对计算机科学几乎一无所知),所以我对“工人”或“过程”之类的东西的理解实际上是非常有限的。但是,我确实对运行一个简单的for循环存在疑问,该循环可能在并行迭代之间没有依赖性。
假设我想执行以下操作:
for N in 1:5:20
println("The N of this iteration in $N")
end
如果我只是希望这些消息出现在屏幕上,并且显示顺序无关紧要,那么如何在Julia 0.6中实现这一目标,并在Julia 0.7(以及1.0)中作为将来的参考呢?
答案 0 :(得分:3)
只需将示例添加到克里斯的答案中即可。自julia 1.3发行以来,您可以使用Threads.@threads
Threads.@threads for N in 1:5:20
println("The number of this iteration is $N")
end
此处您仅运行一个具有多个线程的julia会话,而不是在运行多个julia会话的地方使用Distributed
。
例如,参见multithreading blog post以获得更多信息。
答案 1 :(得分:1)
以例如julia -p 4
,如果要使用4 cpus(或使用功能addprocs(4)
)。在Julia 0.6中,您进行如下并行循环:
@parallel for N in 1:5:20
println("The N of this iteration in $N")
end
在Julia 0.7中:
using Distributed
@distributed for N in 1:5:20
println("The N of this iteration in $N")
end
对于任何认真的工作,请查看手册https://docs.julialang.org/en/v0.6.4/manual/parallel-computing/,尤其是有关SharedArrays的部分。
在上面的示例中,假定所有CPU都可以访问共享内存(例如,“ OpenMP样式”并行性),这是多核CPU的常见情况。如果要跨不同的计算机分发工作,请考虑使用功能pmap
或程序包MPI.jl
。