C MPI_屏障-只有一些进程通过屏障

C MPI_屏障-只有一些进程通过屏障,c,mpi,barrier,C,Mpi,Barrier,我面临的情况是,只有一些进程绕过了MPI\u屏障功能 问题出现在这段代码中: 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 bar

我面临的情况是,只有一些进程绕过了
MPI\u屏障
功能

问题出现在这段代码中:

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],但只有进程
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和centos inside docker。应用程序启动了几个线程,但显示的片段不在其中任何一个线程中。

我遇到过类似的问题,开始搜索web。据我所知,我发现OpenMPI中MPI_屏障的实现可能有缺陷,具体取决于具体的版本


我也遇到过类似的问题,开始在网上搜索。据我所知,我发现OpenMPI中MPI_屏障的实现可能有缺陷,具体取决于具体的版本


请解释为什么您认为问题与屏障有关。在我看来,所有四个过程都达到了障碍,然后过程1得以继续。之后会发生什么与屏障无关。编辑问题,解释预期输出。谢谢。因为您没有提供再现问题的最小工作示例,所以仍然不可能说什么。代码片段本身没有问题。因此,第一个怀疑是这种行为是由于代码的其他部分造成的(例如,您可能事先在其他进程上调用了非阻塞屏障,而现在在进程1上调用了MPI_屏障)。它是否适用于不同数量的流程?可能是由于环境的原因,它在其他系统上工作吗?多线程是什么意思?@haraldkl,“与点对点操作不同,非阻塞集合操作与阻塞集合操作不匹配”-直接出自MPI标准。@Zulan,给定通信器上的集合调用顺序(阻塞或非阻塞)在所有列组中必须相同,因此,根据标准,您描述的这种场景确实是错误的。如果OP不是真的在做一些乱七八糟的事情,我会更支持这样的假设,即这是另一种网络接口配置错误的情况(OpenMPI很容易出现这种情况)。请解释为什么您认为问题与屏障有关。在我看来,所有四个过程都达到了障碍,然后过程1得以继续。之后会发生什么与屏障无关。编辑问题,解释预期输出。谢谢。因为您没有提供再现问题的最小工作示例,所以仍然不可能说什么。代码片段本身没有问题。因此,第一个怀疑是这种行为是由于代码的其他部分造成的(例如,您可能事先在其他进程上调用了非阻塞屏障,而现在在进程1上调用了MPI_屏障)。它是否适用于不同数量的流程?可能是由于环境的原因,它在其他系统上工作吗?多线程是什么意思?@haraldkl,“与点对点操作不同,非阻塞集合操作与阻塞集合操作不匹配”-直接出自MPI标准。@Zulan,给定通信器上的集合调用顺序(阻塞或非阻塞)在所有列组中必须相同,因此,根据标准,您描述的这种场景确实是错误的。如果OP不是真的在做一些乱七八糟的事情,我会更支持这样的假设,即这是另一种网络接口配置错误的情况(OpenMPI很容易出现这种情况)。