【问题标题】:How do I force MPI to not run on all cores if I have more threads than cores?如果我的线程多于内核,如何强制 MPI 不在所有内核上运行?
【发布时间】:2017-04-29 15:42:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: multithreading mpi hpc


    【解决方案1】:

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

    【讨论】:

    • 为什么要禁用进程绑定?
    • @oliversm 因为当您拥有比 CPU 内核更多的活动进程/线程时,最好不要固定它们,而是让操作系统安排它们以平衡负载。
    猜你喜欢
    • 2017-08-22
    • 2017-05-20
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 2013-02-01
    • 2010-12-26
    • 2015-06-03
    • 1970-01-01
    相关资源
    最近更新 更多