OpenMPI和排名/核心绑定

时间:2015-05-13 13:06:09

标签: mpi openmpi hpc

我遇到了OpenMPI问题,其中不同的MPI排名可重复绑定到相同的CPU核心。

我使用的服务器有32个硬件核心(没有超线程),Ubuntu 14.04.2 LTS和OpenMPI 1.8.4,使用英特尔编译器15.0.1编译。

例如,我可以运行具有8个MPI等级的可执行文件,并获得以下排名到核心绑定,

$ mpirun -n 8 --report-bindings ./executable
[simple:16778] MCW rank 4 bound to socket 0[core 1[hwt 0]]: [./B/./././././.][./././././././.][./././././././.][./././././././.]
[simple:16778] MCW rank 5 bound to socket 1[core 9[hwt 0]]: [./././././././.][./B/./././././.][./././././././.][./././././././.]
[simple:16778] MCW rank 6 bound to socket 2[core 17[hwt 0]]: [./././././././.][./././././././.][./B/./././././.][./././././././.]
[simple:16778] MCW rank 7 bound to socket 3[core 25[hwt 0]]: [./././././././.][./././././././.][./././././././.][./B/./././././.]
[simple:16778] MCW rank 0 bound to socket 0[core 0[hwt 0]]: [B/././././././.][./././././././.][./././././././.][./././././././.]
[simple:16778] MCW rank 1 bound to socket 1[core 8[hwt 0]]: [./././././././.][B/././././././.][./././././././.][./././././././.]
[simple:16778] MCW rank 2 bound to socket 2[core 16[hwt 0]]: [./././././././.][./././././././.][B/././././././.][./././././././.]
[simple:16778] MCW rank 3 bound to socket 3[core 24[hwt 0]]: [./././././././.][./././././././.][./././././././.][B/././././././.]

按预期工作。

问题是如果我第二次运行此命令(在不同的文件夹中运行),我会再次获得完全相同的绑定。意味着在32个CPU核心中,8个将具有两次加载,而其余24个将不执行任何操作。

我知道要通过核心,套接字等绑定options Example fiddle {}},我可以明确指定应该与mpirun参数一起使用的核心,或者更一般地说,有排名政策,

  

- 按排名政策排名[slot(默认)| hwthread |核心|                            插座| numa |董事会|节点

我正在寻找的是一种在免费的CPU核心上自动分配负载的方法,而不是两次重复使用相同的核心。是否有一些政策可以控制这个?

1 个答案:

答案 0 :(得分:1)

您是否同时运行可执行文件?如果不是,你的系统的行为似乎很逻辑。 如果你想同时运行两个实例并确保它们在不同的内核上运行,你可以尝试这样的事情:

numactl physcpubind=0-7 mpirun -n 8 --report-bindings ./executable &

numactl pyscpubind=8-31 mpirun -n 24 --report-bindings ./executable