在上一篇中我们对集合通信做了一个非常简要的介绍,后面我们将逐步介绍 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;以大写字母开头的 Bcast 只能广播具有单段缓冲区接口的类数组对象,如 numpy 数组,参数 buf 可以是一个长度为2或3的 list 或 tuple,类似于 [data, MPI.DOUBLE],或者

本文介绍了mpi4py库中的广播操作,包括组内和组间通信子的广播功能,强调了根进程的角色以及不同组进程的接收规则。还详细说明了mpi4py的bcast和Bcast方法,支持不同类型的广播数据,并提供了使用示例。
最低0.47元/天 解锁文章
1306

被折叠的 条评论
为什么被折叠?



