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

How do I force MPI to not run on all cores if I have more threads than cores?

上下文:我正在调试一个模拟代码,该代码要求从重启文件继续模拟时 MPI 线程的数量不会改变。此代码在大型集群上 运行ning,但我在较小的本地计算机上调试它,这样我就不必等待将作业提交到队列。该代码需要 72 个线程,这比本地计算机上的内核数还多。这本身不是问题 - 我可以 运行 使用比核心更多的线程,并且只承受性能损失,这在调试时不是主要问题。

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

假设我愿意在比核心更多的线程上处理 运行ning 的内存和性能问题,我实际上该怎么做?我是否必须以某种方式进入调度程序的后端?这取决于我使用的是 MPICH 还是 Open-MPI 等?

我基本上是在寻找类似 mpirun -np 72 --cpus-per-proc 0.5 的东西,如果可能的话。

taskset -c 0-35 mpiexec -np 72 ./a.out 如果要在同一台主机上启动所有进程并且应该与基本上所有 MPI 发行版(Open MPI、MPICH、Intel MPI 等)一起工作,则应该可以解决问题。此外,确保禁用 MPI 库的任何进程绑定,即为 Open MPI 1.8+ 传递 --bind-to none,为 MPICH with Hydra 传递 -bind-to none 或为 Intel MPI 传递 -genv I_MPI_PIN=0