如果我的线程比内核更多,我如何强制MPI不在所有内核上运行



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

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

假设我愿意处理比内核更多的线程运行的内存和性能问题,我该如何真正做到这一点?我必须以某种方式进入调度程序的后端吗?这取决于我是使用mpich还是open-mpi等?

如果可能的话,我实际上是在寻找诸如mpirun -np 72 --cpus-per-proc 0.5之类的东西。

taskset -c 0-35 mpiexec -np 72 ./a.out如果要在同一主机上启动该过程,并且应该与所有MPI分布(Open MPI,MPICH,MPICH,INTEL MPI等)一起使用。另外,请确保禁用MPI库绑定的任何过程,即通过 --bind-to none for Open MPI 1.8 ,用于MPICH的-bind-to none使用HYDRA或-genv I_MPI_PIN=0用于Intel MPI。

最新更新