我面临的情况是只有一些进程绕过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

应用程序冻结。
我原以为所有进程都能打印消息,但只有进程才能打印消息。
为什么不是所有的过程都通过了障碍?
我期望的结果是:
[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/

10-08 23:32