MPI-3 非阻塞集合通信

本文介绍了MPI-3标准新增的非阻塞集合通信特性,通过mpi4py库实现。非阻塞通信允许进程在等待通信完成的同时执行其他计算任务,提高效率。文中详细展示了非阻塞广播、分散、收集、规约等操作,并通过Ibarrier非阻塞栅障同步示例解释了其工作原理和优势。
摘要由CSDN通过智能技术生成

本文从本人简书博客同步过来

上一篇中我们概要地介绍了最新的 MPI-3 标准中引进的新特性,mpi4py 3.0.0 支持 MPI-3 的很多新特性,我们将在后面逐步介绍,下面我们首先介绍 mpi4py 中的非阻塞集合通信。

前面我们介绍了 mpi4py 中的集合通信,不过前面介绍的是 MPI-1 和 MPI-2 标准下的集合通信方法,所有这些方法都是阻塞式的,在通信没有完成之前,这些方法不会返回,因此无法进行后面的计算任务。MPI-3 标准引进了所有这些集合通信方法的非阻塞版本,mpi4py 中的非阻塞集合通信方法与其对应的阻塞版本有着完全一样的方法接口,不同的是这些非阻塞方法会返回一个 MPI.Request 对象,然后可以通过该对象的 Test 或者 Wait 等方法来测试或等待通信的完成,这部分与非阻塞的点到点通信的测试和等待是一样的。非阻塞集合通信也可以防止死锁,并通过将通信和计算重叠而提高程序的运行效率。

方法接口

下面给出非阻塞集合通信的方法接口。

MPI.Comm.Ibcast(self, buf, int root=0)

非阻塞广播操作。对应阻塞版本的 MPI.Comm.Bcast,返回 MPI.Request 对象。

MPI.Comm.Iscatter(self, sendbuf, recvbuf, int root=0)

非阻塞发散操作。对应阻塞版本的 MPI.Comm.Scatter,返回 MPI.Request 对象。

MPI.Comm.Iscatterv(self, sendbuf, recvbuf, int root=0)

非阻塞向量发散操作。对应阻塞版本的 MPI.Comm.Scatterv,返回 MPI.Request 对象。

MPI.Comm.Igather(self, sendbuf, recvbuf, int root=0)

非阻塞收集操作。对应阻塞版本的 MPI.Comm.Gather,返回 MPI.Request 对象。

MPI.Comm.Igatherv(self, sendbuf, recvbuf, int root=0)

非阻塞向量收集操作。对应阻塞版本的 MPI.Comm.Gatherv,返回 MPI.Request 对象。

MPI.Comm.Ireduce(self, sendbuf, recvbuf, Op op=SUM, int root=0)

非阻塞规约操作。对应阻塞版本的 MPI.Comm.Reduce,返回 MPI.Request 对象。

MPI.Comm.Iallgather(self, sendbuf, recvbuf)

非阻塞全收集操作。对应阻塞版本的 MPI.Comm.Allgather,返回 MPI.Request 对象。

MPI.Comm.Iallgatherv(self, sendbuf, recvbuf)

非阻塞向量全收集操作。对应阻塞版本的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值