我刚开始学习Julia的并行,并且对于进程与CPU工作的细节不是很清楚。
关于进程并行,我有几点疑问:
- 使用
Sys.CPU_THREADS
来考虑应该添加的进程数是否正确? - 通过
addprocs(Sys.CPU_THREADS - 1)
是否是为每个CPU核心添加一个进程,Julia是否是默认这样做的 - 假设2成立,那么添加了多于CPU核心数的进程,相较于核心与进程一一对应的情况是否会提高并行的效率
提前感谢!
我刚开始学习Julia的并行,并且对于进程与CPU工作的细节不是很清楚。
关于进程并行,我有几点疑问:
Sys.CPU_THREADS
来考虑应该添加的进程数是否正确?addprocs(Sys.CPU_THREADS - 1)
是否是为每个CPU核心添加一个进程,Julia是否是默认这样做的提前感谢!
线程数
没看懂
这个跟具体问题相关吧
错误,一般的数值代码并行应该使用CPU物理核心数,这里的CPU_THREADS是包括hyper thread的线程数。
编译器无法强制进程和CPU核心绑定,这个需要调用系统接口,在相对特殊的应用里才需要考虑强制和CPU物理核心绑定进程。Julia里要做需要调用系统接口(比如Linux上 bash - Assigning a cpu core to a process - Linux - Stack Overflow )
进程的数量取决于算法。如果是简单的并行不会提高效率,反而有可能降低效率。并且具体性能需要你benchmark来决定。想要谈性能先学习怎么benchmark
感谢回复!还是有一些不太明白。比如我现在需要计算两个8000×8000矩阵的乘积,我会这样做:使用length(Sys.cpu_info)
查看核心数为8,于是addprocs(7)
,然后开始一通计算。