防止 MPI 忙循环

Prevent MPI from busy looping

我有一个 MPI 程序,oversubscribes/overcommits 它的处理器。即:进程比处理器多很多。

不过,在给定时间只有少数这些进程处于活动状态,因此不应争用计算资源。

但是,就像海底总动员中的海鸥群一样,当这些进程在等待通信时,它们都在忙着循环,询问"Mine? Mine? Mine?"

我正在使用 Intel MPI 和 OpenMPI(针对不同的机器)。我怎样才能说服他们 both 不要忙循环?

我的快速而肮脏的解决方案是在带有睡眠命令的循环中使用 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,请参阅链接 post。