在上一篇中我们介绍了 mpi4py 中的扫描操作方法,下面我们将介绍栅障同步操作。
此为实施在通信子上的同步操作,会阻塞所有的进程直到所有的进程都调用此操作。如果是组间通信子,则会在组间通信子上的所有进程之间执行,但也允许当所有远程组中的进程进入 barrier 之后,所有本地组中的进程已经离开。
方法接口
mpi4py 中的栅障同步操作的方法(MPI.Comm 类的方法)接口为:
barrier(self)
Barrier(self)
barrier 和 Barrier 实施的操作相同,可以任意使用其中的一个。
注意:前面介绍的很多阻塞式的集合通信(如 Bcast,Scatter,Gather,Allgather 等)都隐式地包含着同步操作,因此并不需要显式地调用 Barrier 进行同步。但是在某些情况下,显式的同步操作对应保证程序的顺利执行却是必须的,如我们前面介绍的点到点就绪通信模式,要求仅当对方的接收操作启动并准备就绪时才可发送数据,否则可能导致错误或无法预知的结果,一种保证发送操作晚于对方的接收操作的方式就是使用这里的栅障同步,让接收操作在 Barrier 之前,而让就绪的发送操作在 Barrier 之