Multithreading

所有程序在同一個核心上執行

  • September 30, 2020

我發現我機器上的所有程序都只能在單個核心上執行,並且它們的核心親和性設置為 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))

htop 看起來像這樣: 在此處輸入圖像描述 核心親和力是:

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 環境變數。

該問題與SLURM根據PBS請求的核心數量設置核心親和性有關。添加SLURM以下行可以使用所有核心:

#SBATCH --cpus-per-task=8

引用自:https://unix.stackexchange.com/questions/609198