Julia中的并行计算-在多个内核上运行简单的for循环

时间:2018-07-21 19:34:24

标签: parallel-processing julia

对于初学者来说,我不得不说我对并行计算是完全陌生的(并且对计算机科学几乎一无所知),所以我对“工人”或“过程”之类的东西的理解实际上是非常有限的。但是,我确实对运行一个简单的for循环存在疑问,该循环可能在并行迭代之间没有依赖性。

假设我想执行以下操作:

for N in 1:5:20
    println("The N of this iteration in $N")
end

如果我只是希望这些消息出现在屏幕上,并且显示顺序无关紧要,那么如何在Julia 0.6中实现这一目标,并在Julia 0.7(以及1.0)中作为将来的参考呢?

2 个答案:

答案 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