MPI 中的屏障:如何实现屏障以使进程相互等待

Posted

技术标签:

【中文标题】MPI 中的屏障:如何实现屏障以使进程相互等待【英文标题】:Barrier in MPI: How to implement barrier to make processes wait for one another 【发布时间】:2021-05-14 07:09:09 【问题描述】:

有没有办法在 MPI 代码中添加障碍。

我的意思是说,我希望所有不同的处理器首先完成直到一个点,然后从那里继续。也就是说,一个处理器必须等待其他处理器完成代码直到该区域,然后才继续执行代码的剩余部分。

例如,

int main()

.
.
.
  //I want all my processors to do till this and 
   wait for other processers to complete till this point, 
   and then resume the remaining part
.
.
.


在 MPIch 中有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

即一个处理器必须等待其他处理器完成 代码直到该区域,然后只进行到剩余部分 代码。

是的,你要找的是套路MPI_Barrier:

阻塞,直到通信器中的所有进程都达到此 例行公事。

备注

阻塞调用者,直到通信器中的所有进程都调用 它;也就是说,只有在所有成员之后,调用才会在任何进程返回 通讯器已进入通话。

要了解有关何时使用 MPI_Barrier 的更多信息,您可以阅读何时使用 I need to use MPI_Barrier()?

【讨论】:

以上是关于MPI 中的屏障:如何实现屏障以使进程相互等待的主要内容,如果未能解决你的问题,请参考以下文章

MPI_Barrier - 只有一些进程通过屏障

使用信号量实现 N 个进程屏障

MPI_Type_commit 是不是隐式调用 MPI_COMM_WORLD 中所有进程的屏障?

为啥我会收到使用 MPI 屏障 [c++] 的致命错误

消息传递系统中的屏障是如何实现的?

使用二进制信号量实现屏障(一种同步结构)