mpi4py 中的属性和命名操作

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

上一篇中我们介绍了 MPI 3.1 新增的若干功能,下面我们将介绍 mpi4py 中的属性和命名操作。

应用程序可在运行时定制一些信息与相应的 MPI 对象(包括通信子对象,数据类型对象,窗口对象等)相关联,称之为该对象的属性。实际上,MPI 内部的一些工作机制也是通过这种方式来实现的,如集合操作,虚拟进程拓扑等。属性为本地(当前)进程和相关对象所私有,不会自动迁移到其它对象中,除非使用像 MPI_Comm_dup 等的操作进行复制。

从 MPI-2 开始也可对 MPI 对象命名。命名 MPI 对象可方便错误处理、调试等工作。命名 MPI 对象无须全局同步,即命名函数是一个本地操作。 MPI 对象命名后不会因复制而被其副本继承。对象的名字采用与属性不同的处理方式——即对象的名字由 MPI 环境复制保存而非通过应用程序加以维护。

下面对属性和命名操作的相关方法接口进行介绍。

通信子

MPI.Comm.Create_keyval(type cls, copy_fn=None, delete_fn=None, nopython=False)

创建并返回一个与通信子对象关联的属性键(为一个整型值),以后使用该键访问其所关联的值。copy_fn 为属性复制函数,用于定义在调用 MPI.Comm.Dup 时复制相应属性的策略,delete_fn 为属性删除函数,用于定义在调用 MPI.Comm.Free 或 MPI.Comm.Delete_attr 时释放相应属性的策略。当 copy_fn 为 None 时,会使用默认的复制函数(默认行为为不复制),当 delete_fn 为 None 时,会使用默认的删除函数(默认行为为不删除),如果非 None,它们的函数原型定义为
def copy_fn(o, k, v):

def del_fn(o, k, v):
其中的参数为:o 为属性所关联的对象,k 为所创建的属性键,vk 所关联的值,可以在这两个函数中定制对某个值的复制和删除行为,然后将它们作为参数传递给 copy_fndelete_fn 以实现特定的复制和删除行为。参数 nopython 指明是否可以设置 Python 对象作为属性,其默认值 False 表明可以设置 Python 对象作为属性,否则只能设置 C/Fortran 支持的数据对象。

MPI.Comm.Free_keyval(type cls, int keyval)

将属性键 keyval 的值设置为 MPI.KEYVAL_INVALID 并返回,待不用时释放占用空间。

MPI.Comm.Set_attr(self, int keyval, attrval)

为属性键 keyval 设置属性值 attrval,如果指定的 keyval 键尚不存在则出错,如果该键已经有属性值,则该调用相当于先调用 MPI.Comm.Delete_attr 删除旧值,然后再设置新值。注意:当调用 MPI.Comm.Create_keyval 创建 keyval 时如果其 nopython 参数为 False,则此处 attrval 可以为 Python 对象如列表,字典等,但是如果 nopython 参数为 Tru

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值