mpi4py 中的单边通信相关操作

本文详细介绍了如何在mpi4py中进行单边通信,包括创建/释放窗口对象、Put、Get和Accumulate操作。这些操作在并行计算中用于非阻塞的数据传输,无需匹配的接收方操作。文章还给出了相关操作的使用示例。
摘要由CSDN通过智能技术生成

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

上一篇中我们简要地介绍了 mpi4py 中的单边通信概念,下面我们将介绍单边通信的相关操作。

创建/释放窗口对象

注意:在使用单边通信操作之前,所有进程都须通过共同参与的创建窗口操作公开声明自己可供访问的内存空间。

创建和释放窗口对象的方法(MPI.Win 类方法)接口如下:

Create(type cls, memory, int disp_unit=1, Info info=INFO_NULL, Intracomm comm=COMM_SELF)

创建并返回用于单边通信的窗口对象。在组内通信子 comm 所指定的通信子范围内所有进程上执行集合操作,每个进程通过一块内存缓冲区 memory 指定要创建的窗口,可以为 None(或 MPI.BOTTOM),此时不提供可供其它进程访问的窗口。disp_unit 指定在远端内存访问操作中的地址单位,即 origin 所指定的位置在 target 一侧要以 target 进程所指定的 diap_unit 为单位计算。通常如果采用相同类型创建窗口,则统一将 disp_unit 设置成 1 即可。如果有的进程需要以组合数据类型(type)给出缓冲区,则可能需要指定 disp_unit 为 sizeof(type)。info 对象用于为 MPI 环境提供优化所需的辅助信息,目前可用的 key 为 no_lock,如果该值设置为 True,则指示 MPI 环境不对进程的本地窗口加锁,也就是说此时表示应用程序可以确信相应窗口不会作为第三方参与通信,这样就可减少相应进程异步代理机制上的一些额外操作。参与创建窗口的进程可分别指定不同的 memorydisp_unitinfo 参数,内存中的同一块区域也可同时存在于多个窗口中,只要应用程序能确保并发访问这块区域所需的安全语义。

Free(self)

释放当前窗口对象。会在所有进程间实施 barrier 同步操作,直至所有进程都执行完毕才返回。所有进程都必须在其远端内存访问结束后才可调用此操作。

通信操作

单边通信的 3 种操作方法(MPI.Win 类方法)接口如下:

Put(self, origin, int target_rank, target=None)

该操作把当前进程 origin 中的数据传输到进程 target_ranktarget 位置。参数 origin 应该是一个长度为2或3的 list 或 tuple,类似于

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值