我对同一 python 命令的多次启动如何绑定到 NUMA Xeon 机器上的内核感到困惑。
我读到OMP_NUM_THREADS
env var 设置了为numactl
进程启动的线程数。因此,如果我在超线程 HT 机器上运行numactl --physcpubind=4-7 --membind=0 python -u test.py
(OMP_NUM_THREADS=4
下面的 lscpu 输出),它会将这个 numactl 进程限制为 4 个线程。但是由于机器有 HT,我不清楚4-7
上面是 4 个物理还是 4 个逻辑。
如何找到其中的哪些 numa-node-0 核心
0-23,96-119
是物理的,哪些是逻辑的?都是96-119
合乎逻辑的还是穿插的?如果
4-7
都是物理内核,那么在启用 HT 的情况下,将只需要 2 个物理内核,那么另外 2 个会发生什么?在将线程绑定到物理内核时,OpenMP 库在哪里被调用?
(根据我有限的理解,我可以使用不同的 numactl 绑定python main.py
在sh
shell 中启动命令 20 次,并且 OMP_NUM_THREADS 仍然适用,即使我没有在任何地方明确使用 MPI lib,对吗?)
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 46 bits physical, 48 bits virtual
CPU(s): 192
On-line CPU(s) list: 0-191
Thread(s) per core: 2
Core(s) per socket: 48
Socket(s): 2
NUMA node(s): 4
Vendor ID: GenuineIntel
CPU family: 6
Model: 85
Model name: Intel(R) Xeon(R) Platinum 9242 CPU @ 2.30GHz
Stepping: 7
Frequency boost: enabled
CPU MHz: 1000.026
CPU max MHz: 2301,0000
CPU min MHz: 1000,0000
BogoMIPS: 4600.00
L1d cache: 3 MiB
L1i cache: 3 MiB
L2 cache: 96 MiB
L3 cache: 143 MiB
NUMA node0 CPU(s): 0-23,96-119
NUMA node1 CPU(s): 24-47,120-143
NUMA node2 CPU(s): 48-71,144-167
NUMA node3 CPU(s): 72-95,168-191