我有一个MPI程序,它过度订阅/过度使用其处理器。那就是:进程多于处理器。
但是,在给定时间内,这些进程中只有少数是活动的,因此不应该争用计算资源。
但是,就像来自海底总动员的海鸥一样,当这些过程等待通信时,他们都在忙着循环,问“我的?我的?我的?”?
我正在使用英特尔MPI和OpenMPI(适用于不同的机器)。我如何说服他们不要忙碌循环?
我的快速而肮脏的解决方案是在一个带睡眠命令的循环中使用MPI_Iprobe
(参见here)。
这已经有一段时间了,但是这个post可能有你想要的答案。 (tl;如果你使用的是OpenMPI,博士将--mca mpi_yield_when_idle 1
作为参数传递给mpirun
)
除此之外,如果您的MPI进程在MPI障碍处等待,您可以设置I_MPI_WAIT_MODE = 1以防止INTEL的MPI中的忙循环。对于OpenMPI,请参阅链接的帖子。