我有一个 MPI 程序,它超额订阅/超额使用它的处理器。也就是说:进程比处理器多得多。
不过,在给定时间只有少数这些进程处于事件状态,因此不应该争用计算资源。
但是,就像 海底总动员 中的海鸥群一样,当这些进程在等待通信时,它们都在忙着循环,问“我的?我的?我的?”
我同时使用 Intel MPI 和 OpenMPI(针对不同的机器)。我怎样才能说服他们双方不要忙循环?
我的快速而肮脏的解决方案是在带有 sleep 命令的循环中使用 MPI_Iprobe
(请参阅 here)。
最佳答案
自从有人提出这个问题以来已经有一段时间了,但是这个 post 可能有您正在寻找的答案。 (tl;dr 将 --mca mpi_yield_when_idle 1
作为参数传递给 mpirun
,如果您使用的是 OpenMPI)
除此之外,如果您的 MPI 进程正在 MPI Barriers 等待,您可以设置 I_MPI_WAIT_MODE=1 以防止 INTEL 的 MPI 中出现忙循环。对于 OpenMPI,请参阅链接帖子。
关于c++ - 防止 MPI 忙循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37078753/