我试图更好地了解启用超线程的多核处理器是如何工作的。假设我有一个可以用 MPI 或 OpenMP 或 MPI+OpenMP 编译的应用程序。我想知道它将如何安排在具有四个 Xeon X7560 @ 2.27GHz 处理器并且每个处理器内核都启用了超线程的 CentOS 5.3 机器上。
处理器在 /proc/cpuinfo 中从 0 到 63 编号。据我了解,有 4 个 8 核物理处理器,总共 PHYSICAL CORES 为 32,每个处理器内核都启用了超线程,总共 LOGICAL 处理器为 64。
使用 MPICH2 编译 如果我使用 mpirun -np 16 运行将使用多少物理内核?它是否在可用的 16 个物理内核或 16 个逻辑处理器(使用超线程的 8 个物理内核)之间进行划分?
使用 OpenMP 编译如果我设置 OMP_NUM_THREADS=16,将使用多少物理内核?它会使用 16 个逻辑处理器吗?
使用 MPICH2+OpenMP 编译如果我设置 OMP_NUM_THREADS=16 并使用 mpirun -np 16 运行,将使用多少物理内核?
使用 OpenMPI 编译
OpenMPI 有两个运行时选项
-cpu-set 指定分配给作业的逻辑 cpu, -cpu-per-proc 指定每个进程使用的 cpu 数量。
如果使用 mpirun -np 16 -cpu-set 0-15 运行,它会只使用 8 个物理内核吗?
如果使用 mpirun -np 16 -cpu-set 0-31 -cpu-per-proc 2 运行,它将如何安排?
谢谢
杰瑞