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