and*_*ame 1 multithreading julia
我的台式机 CPU 是 intel i7-4770,它有 4 个物理内核和 8 个逻辑内核。为了获得最佳性能,我如何使用附加参数启动 Julia。“julia -p 4 -t 8”是对的吗?
这是两种不同的选择。
-t 用于单个 Julia 进程的线程数-p 用于(本地)Julia 集群中的进程数,这些进程中的每一个都可以有一个或多个线程。线程和多处理之间的区别在于并行计算的模式——主要是由于任务访问内存的方式不同。对于多线程,您将使用Threadspackage 和 mutltiprocessingDistributed包。
下面的例子应该可以解决问题。
在单个进程中运行 4 个线程:
$ julia -t 4
julia> Threads.nthreads()
4
julia> using Distributed
julia> Distributed.nworkers()
1
Run Code Online (Sandbox Code Playgroud)
运行 4 个单线程 worker(总共 5 个julia进程)并检查第二个 worker 上的线程数:
$ julia -p 4
julia> using Distributed
julia> Distributed.nworkers()
4
julia> fetch(@spawnat 2 Threads.nthreads())
1
Run Code Online (Sandbox Code Playgroud)
运行 4 个多线程 worker(总共 5 个julia进程,每个进程有 4 个线程)并检查 master 和第二个 worker 上的线程数:
$ julia -p 4 -t 4
julia> using Distributed
julia> Distributed.nworkers()
4
julia> Threads.nthreads()
4
julia> fetch(@spawnat 2 Threads.nthreads())
4
Run Code Online (Sandbox Code Playgroud)
现在关于性能,简短的回答是“视情况而定”。一些库将使用多线程功能,而其他库则大多不会。
例如LinearAlgebra,默认情况下使用BLASwhich 具有自己的多线程设置:
$ julia -t 3
julia> using LinearAlgebra
julia> BLAS.vendor()
:openblas64
julia> BLAS.get_num_threads()
8
Run Code Online (Sandbox Code Playgroud)
其他软件包,例如DataFrames目前正在为多线程大量开发的软件包,应该充分利用该-t参数。
基本上使用-t auto默认为逻辑核心数的设置可能是一个很好的设置。
在运行您自己的算法时,您将决定是采用多线程还是多处理。一般的经验法则是,对于数值计算,多线程通常更易于使用,但多处理可扩展(并且使用该--machine-file选项可以拥有巨大的分布式 Julia 集群)。
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |