我正面临只有一些进程绕过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
我正在使用openmpi和docker里面的centos。应用程序启动了几个线程,但显示的片段不在其中任何一个。
答案 0 :(得分:-1)
我遇到过类似的问题,开始在网上搜索。我发现 - 据我所知 - 在OpenMPI中MPI_Barrier的实现可能有问题,具体取决于具体的版本。