防止MPI忙于循环

Ric*_*ard 8 c++ mpi openmpi intel-mpi busy-waiting

我有一个MPI程序,它过度订阅/过度使用其处理器.那就是:进程多于处理器.

但是,在给定时间内,这些进程中只有少数是活动的,因此不应该争用计算资源.

但是,就像来自海底总动员的一群海鸥一样,当这些过程等待通信时,他们都在忙着循环,问"我的?我的?我的?"?

                                      Nemo Seagulls

我正在使用英特尔MPI和OpenMPI(适用于不同的机器).我怎样才能说服他们没有繁忙的循环?

我的快速而肮脏的解决方案是MPI_Iprobe在带有sleep命令的循环中使用(参见此处).

小智 6

自从有人问这个问题以来已经有一段时间了,但这篇文章可能有您正在寻找的答案。(tl;dr--mca mpi_yield_when_idle 1作为参数传递给,mpirun如果您使用 OpenMPI)

除此之外,如果您的 MPI 进程在 MPI Barriers 处等待,您可以设置 I_MPI_WAIT_MODE=1 以防止 INTEL 的 MPI 中出现忙循环。对于 OpenMPI,请参阅链接的帖子。