SeS*_*esa 7 parallel-processing julia
首先,我不得不说我对并行计算是完全陌生的(并且对计算机科学几乎一无所知),因此我对“工人”或“过程”之类的东西的理解实际上是非常有限的。但是,我确实对运行一个简单的for循环存在疑问,该循环可能在并行迭代之间没有依赖性。
假设我想执行以下操作:
for N in 1:5:20
println("The N of this iteration in $N")
end
Run Code Online (Sandbox Code Playgroud)
如果我只是希望这些消息出现在屏幕上,并且出现的顺序无关紧要,那么如何在Julia 0.6中实现这一目标,并在Julia 0.7(以及1.0)中作为将来的参考呢?
wue*_*eli 10
只是为了将示例添加到 Chris 的答案中。自 Julia 1.3 发布以来,您可以轻松地使用Threads.@threads
Threads.@threads for N in 1:5:20
println("The number of this iteration is $N")
end
Run Code Online (Sandbox Code Playgroud)
在这里,您仅使用多个线程运行一个 julia 会话,而不是使用Distributed运行多个 julia 会话的位置。
有关更多信息,请参见例如多线程博客文章。
julia -p 4如果您想使用 4 个 cpu(或使用函数addprocs(4)),请使用eg 启动 julia 。在 Julia 1.x 中,您可以按如下方式进行并行循环:
using Distributed
@distributed for N in 1:5:20
println("The N of this iteration in $N")
end
Run Code Online (Sandbox Code Playgroud)
请注意,每个进程默认都有自己的变量。对于任何严肃的工作,请查看手册https://docs.julialang.org/en/v1.4/manual/parallel-computing/,特别是关于 SharedArrays 的部分。
分布式计算的另一个选择是函数pmap或包MPI.jl。
从 Julia 1.3 开始,您还可以使用 wueli 所述的线程。用 eg 启动 juliajulia -t 4以使用 4 个线程。或者,您可以或JULIA_NUM_THREADS在启动 julia 之前设置环境变量。例如 Linux/Mac 操作系统:
export JULIA_NUM_THREADS=4
Run Code Online (Sandbox Code Playgroud)
在 Windows 中,您可以set JULIA_NUM_THREADS 4在 cmd 提示符下使用。
然后在茱莉亚:
Threads.@threads for N = 1::20
println("N = $N (thread $(Threads.threadid()) of out $(Threads.nthreads()))")
end
Run Code Online (Sandbox Code Playgroud)
假设所有 CPU 都可以访问以上示例中的共享内存(例如“OpenMP 样式”并行性),这是多核 CPU 的常见情况。