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