防止 MPI 忙循环
Posted
技术标签:
【中文标题】防止 MPI 忙循环【英文标题】:Prevent MPI from busy looping 【发布时间】:2016-09-01 21:40:48 【问题描述】:我有一个 MPI 程序过度订阅/过度使用其处理器。也就是说:进程比处理器多得多。
不过,这些进程中只有少数进程在给定时间处于活动状态,因此不应争用计算资源。
但是,就像海底总动员中的海鸥群,当这些进程等待通信时,它们都在忙循环,问“我的?我的?我的?”
我同时使用 Intel MPI 和 OpenMPI(用于不同的机器)。我怎样才能说服他们都不要忙循环?
我的快速而肮脏的解决方案是在循环中使用 MPI_Iprobe
和 sleep 命令(请参阅 here)。
【问题讨论】:
您是否在单个主机上运行所有进程? 不,它们可能分布在多个主机上。 主机用什么样的网络连接? 我实际上在单个主机上遇到了这个问题,只是没有机会对此进行自己的研究。因此,如果有一个普遍的答案,我会非常感兴趣,而不仅仅是针对特定的 BTL。 @Zulan,我不相信有一个通用的开关。根据下面的硬件,每个 BTL 都有自己的同步和通知需求和偏好。 【参考方案1】:这个问题已经有一段时间了,但是这个post 可能有你正在寻找的答案。 (如果您使用的是 OpenMPI,则将 --mca mpi_yield_when_idle 1
作为参数传递给 mpirun
)
除此之外,如果您的 MPI 进程在 MPI 障碍处等待,您可以设置 I_MPI_WAIT_MODE=1 以防止 INTEL 的 MPI 中的繁忙循环。对于 OpenMPI,请参阅链接的帖子。
【讨论】:
以上是关于防止 MPI 忙循环的主要内容,如果未能解决你的问题,请参考以下文章
MPI (mpi4py) - 如果第一个 test() 返回 false,则 irecv() 和 test() 不会在循环中工作