c - MPI_Barrier - 只有一些进程通过屏障

标签 c mpi barrier

我面临这样一种情况,即只有一些进程绕过 MPI_Barrier 函数。

问题出现在这段代码中:

printf("[%d] Before barrier\n", mpi_rank);
fflush(stdout);
MPI_Barrier(MPI_COMM_WORLD);
printf("[%d] After barrier\n", mpi_rank);
fflush(stdout);
sleep(1);

运行 4 个进程后,我得到以下输出:

[3] Before barrier
[2] Before barrier
[0] Before barrier
[1] Before barrier
[1] After barrier

然后应用程序卡住了。

我原以为所有进程都能打印消息 [id] After barrier,但只有进程 1 打印了它。

为什么不是所有进程都通过屏障?

我期待这样的输出:

[3] Before barrier
[2] Before barrier
[0] Before barrier
[1] Before barrier
[1] After barrier
[0] After barrier
[2] After barrier
[3] After barrier

我在 docker 中使用 openmpi 和 centos。应用程序启动了多个线程,但显示的片段不在其中。

最佳答案

我一直遇到类似的问题,开始在网上搜索。我发现——据我所知——OpenMPI 中 MPI_Barrier 的实现可能有问题,具体取决于具体版本。

https://github.com/open-mpi/ompi/issues/3042

MPI_Barrier doesn't function properly

关于c - MPI_Barrier - 只有一些进程通过屏障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37690116/

相关文章:

c - 访问单个结构成员是否会将整个结构拉入缓存?

c - 在 C 中检测 64 位编译

swift - 如何在 Swift 中实现线程安全哈希表(电话簿)数据结构?

c++ - pthread_barrier_wait 在创建所有线程后挂起

c++ - 使用 C/C++ 在 iOS 中写入文件

C 函数转义 shell 命令参数的字符串?

c++ - MPI 帮助找到 n 个数字的最大值

c++ - C++ 中的 MPI_Send MPI_Recv 段错误

mpi - 当我在没有消息的情况下调用 MPI_IRecv/MPI_Recv 时,预期的行为应该是什么

operating-system - 修改为 "Implementing an N process barrier using semaphores"