MPI_Barrier - 只有一些进程通过了障碍

时间:2016-06-07 21:58:29

标签: 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

我正在使用openmpi和docker里面的centos。应用程序启动了几个线程,但显示的片段不在其中任何一个。

1 个答案:

答案 0 :(得分:-1)

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

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

MPI_Barrier doesn't function properly