我面临这样一种情况,即只有一些进程绕过 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 的实现可能有问题,具体取决于具体版本。
关于c - MPI_Barrier - 只有一些进程通过屏障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37690116/