如果线程多于核心,如何强制MPI不在所有核心上运行?

时间:2016-12-14 10:36:13

标签: multithreading mpi hpc

上下文:我正在调试一个模拟代码,该代码要求在从重新启动文件继续模拟时MPI线程的数量不会改变。此代码在大型集群上运行,但我在较小的本地计算机上进行调试,因此我无需等待将作业提交到队列。该代码需要72个线程,这超过了本地计算机上的核心数。这本身不是问题 - 我可以运行更多线程而不是内核,只需要降低性能,这在调试时不是主要问题。

问题:我想为其他任务和其他用户留出一些核心。例如,如果我的小型本地计算机有48个内核,我想运行我的72个线程,比如36个内核,并留下12个内核空闲。我想在不完全接管机器的情况下在本地调试我的大代码。

假设我愿意处理运行在线程上而不是内核的内存和性能问题,我该如何实际执行此操作?我是否必须以某种方式进入调度程序的后端?这取决于我是使用MPICH还是Open-MPI等?

如果可能的话,我基本上正在寻找像mpirun -np 72 --cpus-per-proc 0.5这样的东西。

1 个答案:

答案 0 :(得分:2)

如果要在同一主机上全部启动进程,那么

taskset -c 0-35 mpiexec -np 72 ./a.out应该可以解决这个问题,并且应该基本上适用于所有MPI发行版(Open MPI,MPICH,Intel MPI等)。此外,请确保禁用MPI库的任何进程绑定,即为Open MPI 1.8 +传递--bind-to none,为Hydra传递-bind-to none,为Intel MPI传递-genv I_MPI_PIN=0