c++ - 防止 MPI 忙循环

标签 c++ mpi openmpi busy-waiting intel-mpi

我有一个 MPI 程序,它超额订阅/超额使用它的处理器。也就是说:进程比处理器多得多。

不过,在给定时间只有少数这些进程处于事件状态,因此不应该争用计算资源。

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

Nemo Seagulls

我同时使用 Intel MPI 和 OpenMPI(针对不同的机器)。我怎样才能说服他们双方不要忙循环?

我的快速而肮脏的解决方案是在带有 sleep 命令的循环中使用 MPI_Iprobe(请参阅 here)。

最佳答案

自从有人提出这个问题以来已经有一段时间了,但是这个 post 可能有您正在寻找的答案。 (tl;dr 将 --mca mpi_yield_when_idle 1 作为参数传递给 mpirun,如果您使用的是 OpenMPI)

除此之外,如果您的 MPI 进程正在 MPI Barriers 等待,您可以设置 I_MPI_WAIT_MODE=1 以防止 INTEL 的 MPI 中出现忙循环。对于 OpenMPI,请参阅链接帖子。

关于c++ - 防止 MPI 忙循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37078753/

相关文章:

c++ - 接受字符串和整数输入的计算器

c++ - openssl SSL_get_verify_result 返回错误 20

c - MPI 减少到特定的接收缓冲区地址

c - 无法使用 MPI 数据类型接收数组的子集

c++ - 使用 Code::Blocks 运行具有多个进程的 MPI 程序

parallel-processing - 启用没有时间限制的 Univa Grid Engine 资源预留

mpi - 在 MPI 中启用 OPAL_OUTPUT_VERBOSE

c++ - MPI_Type_get_extent 发生错误

c++ - 类切片导致的未处理异常

c++ - 为什么来自匿名对象的 std::pair 复制该对象而不是移动?