multithreading - 如何将我的计算机设置为 Julia 多线程?
解决方案
这是两种不同的选择。
-t
用于单个 Julia 进程的线程数-p
是针对(本地)Julia 集群中的进程数,每个进程可以有一个或多个线程。
线程和多处理之间的区别在于并行计算的模式——主要是由于任务访问内存的方式不同。对于多线程,您将使用Threads
包和对包进行多线程处理Distributed
。
下面的例子应该可以清楚地说明问题。
在单个进程中运行 4 个线程:
$ julia -t 4
julia> Threads.nthreads()
4
julia> using Distributed
julia> Distributed.nworkers()
1
运行 4 个单线程 worker(共 5 个julia
进程)并检查第二个 worker 上的线程数:
$ julia -p 4
julia> using Distributed
julia> Distributed.nworkers()
4
julia> fetch(@spawnat 2 Threads.nthreads())
1
运行 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
现在关于性能,简短的回答是“取决于”。一些库将使用多线程功能,而其他库大多不会。
例如LinearAlgebra
,默认情况下使用BLAS
which 有自己的多线程设置:
$ julia -t 3
julia> using LinearAlgebra
julia> BLAS.vendor()
:openblas64
julia> BLAS.get_num_threads()
8
其他包,例如DataFrames
目前正在为多线程大量开发的包,应该充分利用该-t
参数。
基本上使用-t auto
默认逻辑核心数可能是一个很好的设置。
在运行自己的算法时,您将决定是使用多线程还是多处理。一般的经验法则是,对于数值计算,多线程通常更容易使用,但多处理规模很大(并且使用该--machine-file
选项,您可以拥有一个巨大的分布式 Julia 集群)。
推荐阅读
- angular - Angular 以编程方式要求的验证器不起作用
- python - python *args 位置参数列表
- flutter - 执行“Flutter Clean”命令后,项目构建文件夹被删除。现在,我无法运行或构建应用程序
- java - UnsatisfiedDependencyException:创建名为“homeController”的 bean 时出错:通过字段“dao”表示不满足的依赖关系
- reactjs - 转义“导入”和 react/html 以在 MDX 中显示为文本?
- swift - SwiftUI 从 List 导航到不同的视图
- calendar - 如何在shamsi日历中找到公共日子?
- r - 我想将特定列中的值更改为 R 中的单个值
- artificial-intelligence - 在 Android 应用程序上集成 RASA 聊天机器人
- node.js - 即使我解决了聚合承诺,等待代码也不会在等待后执行