2

我面临只有一些进程绕过该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。应用程序启动了多个线程,但显示的片段不在其中任何一个线程中。

4

1 回答 1

-1

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

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

MPI_Barrier 无法正常工作

于 2017-07-08T15:42:42.167 回答