我发现我的机器上的所有进程都只在单个核心上运行,并且它们的核心亲和力设置为 0。这是一个小的 python 脚本,它为我重现了这一点:
import multiprocessing
import numpy as np
def do_a_lot_of_compute(a):
for i in range(1000):
a = a * np.random.randn(123789)
return a
if __name__ == '__main__':
with multiprocessing.Pool() as pool:
pool.map(do_a_lot_of_compute, np.arange(10000))
pid 15977's current affinity list: 0
pid 15978's current affinity list: 0
pid 15979's current affinity list: 0
pid 15980's current affinity list: 0
pid 15981's current affinity list: 0
pid 15982's current affinity list: 0
pid 15983's current affinity list: 0
pid 15984's current affinity list: 0
pid 15985's current affinity list: 0
所以我的问题归结为:为什么核心亲和力都设置为0?没有设置 OMP 或 KMP 环境变量。
答案1
SLURM
该问题与PBS
根据请求的核心数量设置核心关联性有关。添加SLURM
以下行可以使用所有核心:
#SBATCH --cpus-per-task=8