美文网首页Python 并行计算
MPI 3.1 新增的若干功能

MPI 3.1 新增的若干功能

作者: 自可乐 | 来源:发表于2018-07-14 21:09 被阅读63次

上一篇中我们介绍了 MPI-3 中大的计数及相关函数,下面我们将介绍 MPI 3.1 新增的若干功能。

MPI 3.1 标准于 2015 年 6 月发布,主要是针对 MPI 3.0 的改正,但也增加了少量的新功能。

新增功能

  • 新增 MPI_Aint_add 和 MPI_Aint_diff 以对内存地址进行更安全和更具移植性的算术加减操作。

这两个新函数用来替代对地址的直接 + 和 - 算术操作。提供这两个新函数的原因是,地址类型的整数 MPI_Aint 或者 INTEGER(KIND=MPI_ADDRESS_KIND) 是有符号的整型数,绝对地址是无符号的整型数,对地址整数进行直接的 + 和 - 操作可能会溢出或产生其它未定义的结果。新增加的函数可以对内存地址进行更安全和更具移植性的算术加减操作,因此在支持此新函数的环境下,不应该对内存地址再执行内置的 + 和 - 运算。

这两个函数在 mpi4py 中的接口为:

MPI.Aint_add(Aint base, Aint disp)

计算内存中的一个绝对地址 base 和一个相对偏移 disp 的和(为内存中的一个绝对地址)并返回。

MPI.Aint_diff(Aint addr1, Aint addr2)

计算内存中的两个绝对地址 addr1addr2 之间的相对偏移。

  • 函数 MPI_Initialized, MPI_Finalize, MPI_Query_thread, MPI_Is_thread_main, MPI_Get_version 和 MPI_Get_library_version 可以在线程中不受限制地调用(就像线程支持最普遍的线程等级 MPI_THREAD_MULTIPLE 一样),而不论真正支持的线程等级。

这几个函数在 mpi4py 中的接口为:

MPI.Is_initialized()

MPI.Is_finalized()

MPI.Query_thread()

MPI.Is_thread_main()

MPI.Get_version()

MPI.Get_library_version()
  • 新增非阻塞集合并行 I/O 函数:MPI_File_iread_at_all + MPI_File_iwrite_at_all 和 MPI_File_iread_all + MPI_File_iwrite_all。引进这些新函数的目的是最终替换掉分步集合 I/O 操作函数,因为分步集合 I/O 操作存在一些限制:在一个时刻对一个文件句柄用户只能有一个活动的分步集合操作存在,即用户在没有结束(调用匹配的 xxx_end)一个 xxx_begin 操作之前,不能对这个文件句柄启动另外一个 xxx_begin 操作。

这几个函数在 mpi4py 中的接口为:

MPI.File.Iread_all(self, buf)

MPI.File.Iwrite_all(self, buf)

MPI.File.Iread_at_all(self, Offset offset, buf)

MPI.File.Iwrite_at_all(self, Offset offset, buf)
  • 新的工具接口函数 MPI_T_cvar_get_index, MPI_T_pvar_get_index, MPI_T_category_get_index 和错误代码 MPI_T_ERR_INVALID 和 MPI_T_ERR_INVALID_NAME。

mpi4py 目前还不支持工具接口,故不作进一步介绍。

例程

下面给出使用例程。

# Aint_add_diff.py


"""
Demonstrates the usage of MPI.Aint_add and MPI.Aint_diff.

Run this with 2 processes like:
$ mpiexec -n 2 python Aint_add_diff.py
"""

import numpy as np
from mpi4py import MPI


comm = MPI.COMM_WORLD
rank = comm.rank

ary = np.arange(10, dtype='i')
base = MPI.Get_address(ary)
print 'rank %d has base address: %d' % (rank, base)
disp = 4
addr = MPI.Aint_add(base, disp)
print 'rank %d has base + %d = %d' % (rank, disp, addr)
diff = MPI.Aint_diff(addr, base)
print 'rank %d has %d - base = %d' % (rank, addr, diff)

运行结果如下:

$ mpiexec -n 2 python Aint_add_diff.py
rank 0 has base address: 25087056
rank 0 has base + 4 = 25087060
rank 0 has 25087060 - base = 4
rank 1 has base address: 46071520
rank 1 has base + 4 = 46071524
rank 1 has 46071524 - base = 4

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

相关文章

  • MPI 3.1 新增的若干功能

    在上一篇中我们介绍了 MPI-3 中大的计数及相关函数,下面我们将介绍 MPI 3.1 新增的若干功能。 MPI ...

  • mpi4py 中的属性和命名操作

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

  • Leangoo敏捷看板工具近期更新汇总

    近期新增功能 1、新增飞书登录、接收消息通知功能; 2、新增工作日志功能; 3、新增企业邀请成员功能; 4、新增卡...

  • SwiftUI一起学之七 -- Sqlite数据库

    一 学习目标 学会操作数据库,完成新增,删除,查询功能 二 学习效果 三 主要操作步骤 3.1 使用Swift P...

  • 无协作,不原型!

    Mockplus3.1新增了团队协作功能,支持一键创建团队项目、团队成员快捷管理、一键通知成员审阅、多人评论批注的...

  • 无协作,不原型!

    Mockplus3.1新增了团队协作功能,支持一键创建团队项目、团队成员快捷管理、一键通知成员审阅、多人评论批注的...

  • 安装和使用 mpi4py

    在上一篇中我们简要介绍了 mpi4py 及其所提供的并行编程功能,本文介绍如何安装和使用 mpi4py。 安装依赖...

  • mpi4py 进阶之 mpiutil

    在上一篇中我们介绍了 mpi4py 的若干使用技巧,并且简要介绍了 caput 及其 mpiutil 模块,下面我...

  • Torque Maui

    Mpi: MPI 中文 Mpi 百科 Mpich.org Mpich Wiki Mpi Tutorials 1 M...

  • 微信新版本8.0.19新增的三个贴心实用功能您使用了吗?

    微信8.0.19新增了若干个新功能,其中有三个非常实用的功能,在这里为各位朋友介绍一下,同时也为微信的贴心设计而真...

网友评论

    本文标题:MPI 3.1 新增的若干功能

    本文链接:https://www.haomeiwen.com/subject/psfupftx.html