我有一个 MPI 程序,它过度订阅/过度使用它的处理器。也就是说:进程比处理器多得多。
但是,这些进程中只有少数在给定时间处于活动状态,因此不应该争用计算资源。
但是,就像海底总动员中的海鸥群一样,当这些进程等待通信时,它们都在忙着循环,问“我的?我的?我的?”
我同时使用 Intel MPI 和 OpenMPI(用于不同的机器)。我怎样才能说服他们俩不要忙循环?
我快速而肮脏的解决方案是MPI_Iprobe
在循环中使用 sleep 命令(请参阅此处)。
自从有人问到这个问题已经有一段时间了,但这篇文章可能有你正在寻找的答案。(如果您使用的是 OpenMPI ,则--mca mpi_yield_when_idle 1
作为参数传递给博士)mpirun
除此之外,如果您的 MPI 进程在 MPI Barriers 处等待,您可以设置 I_MPI_WAIT_MODE=1 以防止 INTEL 的 MPI 中的繁忙循环。对于 OpenMPI,请参阅链接的帖子。