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