在上一篇中我们对集合通信做了一个非常简要的介绍,后面我们将逐步介绍 mpi4py 中提供的各个集合通信操作方法,下面我们从广播操作开始。
对组内通信子上的广播操作而言, 组内被标记为根的进程向组内所有其它进程发送消息。
对于组间通信子上的广播操作,其作用是以某个组内的某进程为根,向另外组的其它所有进程广播消息。参与广播操作的组间通信子内包含的所有进程都要参与执行 Bcast 函数,根进程所在的组内除根外的所有其它进程的 root
参数应该设置成 MPI.PROC_NULL,根进程的 root
参数使用 MPI.ROOT;另外组的所有进程的 root
参数为根进程在其所处组内的 rank 值。
需要注意的是,对于组间通信子上的广播操作,与根处于同一组的其它进程均不接收广播消息,而远程组的所有进程都可接收到广播消息。与此相对,在组内通信的广播操作中,根进程同样也要参与通信并接收来自其自身的消息。
mpi4py 中的广播操作的方法(MPI.Comm 类的方法)接口为:
bcast(self, obj, int root=0)
Bcast(self, buf, int root=0)
其中以小写字母开头的 bcast 可以广播任意可被 pickle 系列化的 Python 对象 obj
,并返回所接收到的 obj