我正在使用带有 --physcpubind 选项的 numactl。手册说:
--physcpubind=cpus, -C cpus
Only execute process on cpus. Etc...
假设我有 3 个 NUMA 节点的 NUMA 系统,每个节点都有 4 个内核。NUMA 节点 0 具有 0、1、2、3 作为核心编号。NUMA 节点 1 有 4,5,6,7,NUMA 节点 2 有 8,9,10,11。我的问题是假设我按如下方式运行程序:
export OMP_NUM_THREADS=6
numactl --physcpubind=0,1,4,5,8,9 ./program
即,我将使用 6 个线程运行我的程序,并且我要求它们位于 CPU 内核 0、1、4、5、8、9 上。例如,如果在程序线程 0-5 的某个时间点分配了 CPU 内核 0、1、4、5、8、9 (setup1)。是否有可能在程序执行期间的某个其他时间点,例如,线程 0 可能正在 CPU 核心 9 上运行,等等?即CPU内核之间会有线程迁移吗?或者线程唯一地绑定到 CPU 内核(如 setup1 中)?谢谢。