Process 如何与其他通信器一起使用MPI_屏障?

Process 如何与其他通信器一起使用MPI_屏障?,process,mpi,communicator,Process,Mpi,Communicator,我是MPI编程(mpich2 fedora)的新手。 我写这篇文章是因为,当我和另一个不同于MPI_通信世界的通信者使用MPI_屏障时,我遇到了死锁 我做了两个这样的交流者: MPI通信分割(MPI通信世界、颜色、等级和分割通信) 如果我在所有颜色都能通过的地方设置一个MPI_屏障,就可以了 但如果我在只有color==1可以通过的地方设置一个MPI_屏障,我就死锁了 如何与其他通信器一起使用MPI_屏障? 我还使用了MPI_Bcast()(与另一个不同的通信器MPI_COMM_WORLD一起使

我是MPI编程(mpich2 fedora)的新手。 我写这篇文章是因为,当我和另一个不同于MPI_通信世界的通信者使用MPI_屏障时,我遇到了死锁

我做了两个这样的交流者:

MPI通信分割(MPI通信世界、颜色、等级和分割通信)

如果我在所有颜色都能通过的地方设置一个MPI_屏障,就可以了

但如果我在只有color==1可以通过的地方设置一个MPI_屏障,我就死锁了

如何与其他通信器一起使用MPI_屏障?
我还使用了MPI_Bcast()(与另一个不同的通信器MPI_COMM_WORLD一起使用),但当没有人调用MPI_Bcast时,它并没有被阻止。MPI\u COMM\u WORLD的一个不同的通信器能否同步您自己的进程?

如果您可以发布一段代码片段,这将非常有用。单凭你的话很难调试死锁

无论如何,您将要阻止的通信器作为参数传递给MPI_屏障:

MPI_Bcast是一个阻塞函数。因此,如果一个或多个列组未到达MPI_Bcast调用,则可能会出现死锁


请记住,MPI_COMM_WORLD包括所有级别,即使在MPI_COMM_Split调用之后也是如此。

如果您可以发布一段代码片段,这将非常有用。单凭你的话很难调试死锁

无论如何,您将要阻止的通信器作为参数传递给MPI_屏障:

MPI_Bcast是一个阻塞函数。因此,如果一个或多个列组未到达MPI_Bcast调用,则可能会出现死锁


请记住,MPI_COMM_WORLD包括所有级别,即使在MPI_COMM_Split调用之后也是如此。

关于
MPI_Bcast
具有隐式屏障的说法根本不正确。该标准允许任何进程在其在操作中的部分完成后立即退出集体调用,从而允许优化实现。唯一的例外是总是全局同步的
MPI\u屏障
。感谢您对隐式屏障的澄清。你完全正确。我在上面编辑了我的评论,删除了这一点。关于
MPI\u Bcast
具有隐式屏障的说法根本不正确。该标准允许任何进程在其在操作中的部分完成后立即退出集体调用,从而允许优化实现。唯一的例外是总是全局同步的
MPI\u屏障
。感谢您对隐式屏障的澄清。你完全正确。我编辑了上面的评论,删除了那个部分。