防止MPI忙等待

9

我有一个MPI程序,它超额订阅/超额承诺了其处理器。也就是说:有比处理器更多的进程。

然而,在给定时间内只有少数这些进程是活跃的,所以不应该争夺计算资源。

但是,就像《海底总动员》中的海鸥群一样,当这些进程等待通信时,它们都在忙碌地循环,问“我的?我的?我的?”

                                      Nemo Seagulls

我同时使用Intel MPI和Open MPI(针对不同的机器)。如何使它们不要忙碌循环?

我的简单粗暴的解决方案是使用MPI_IprobeSleep命令结合循环(参见这里)。


不,它们可以分布在多台主机上。 - Richard
什么类型的网络连接主机? - Hristo Iliev
我在单个主机上遇到了这个问题,只是还没有机会自己研究它。因此,如果有一个通用的答案,而不仅仅是针对特定的BTL,我会非常感兴趣。 - Zulan
@Zulan,我不认为有一个通用的开关可以解决这个问题。每个BTL都有自己的同步和通知需求,这取决于底层硬件的特性和偏好。 - Hristo Iliev
@HristoIliev:如果答案不依赖于网络的特定情况,那就太理想了。在一个场景中,我使用的所有内容都在同一主机上。在另一个场景中,有多个主机。 - Richard
显示剩余2条评论
1个回答

5

虽然这个问题已经有一段时间了,但是这个帖子可能有你要找的答案。 (简而言之,如果你正在使用OpenMPI,请将--mca mpi_yield_when_idle 1作为参数传递给mpirun)

除此之外,如果你的MPI进程正在等待MPI Barrier,请将I_MPI_WAIT_MODE=1设置为防止INTEL MPI中的忙碌循环。对于OpenMPI,请参见相关帖子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接