MPI-3 非阻塞通信子复制和组集合通信子创建方法

上一篇中我们介绍了 mpi4py 中的近邻集合通信方法,下面我们将介绍 mpi4py 中的非阻塞通信子复制和组集合通信子创建方法。

非阻塞通信子复制方法 MPI.Comm.Idup 和组集合通信子创建方法 MPI.Comm.Create_group 都是 MPI-3 中新增的通信子创建方法。

在前面已经介绍了 MPI-1 和 MPI-2 中的通信子创建方法,其中 MPI.Comm.Dup 是一个阻塞的通信子复制方法,MPI.Comm.Create 是一个集合通信子创建方法,即处于调用该方法的通信子内的所有进程必须共同参与才能完成一个新的通信子的创建工作,即使所创建的新通信子只包含原通信子里面的部分进程。MPI.Comm.Create 的集合操作性在某些情况下可能会遇到问题,比如说只要一个通信子内的某一个或几个进程因出错误而死掉后,所有这个通信子上的集合操作都无法进行了,因为集合操作要求通信子上的所有进程共同参与。我们可以考虑将该通信子中正常的进程创建成一个新的通信子,并进行后续的计算工作。一种自然的想法是调用该通信子的 MPI.Comm.Create 方法,但是因为其集合操作性,我们无法在该通信子的某些进程死掉的情况下使用 MPI.Comm.Create 创建一个新的通信子,而且其它的集合通信子创建方法如 MPI.Comm.Dup,MPI.Comm.Split 等也都无法使用。MPI-1 和 MPI-2 中没有提供非集合的通信子创建方法,此限制可能会导致直到程序退出该通信子上的所有集合操作都无法进行。

MPI-3 引进的 MPI.Comm.Idup 是 MPI.Comm.Dup 的非阻塞版本,可以通过将通信子创建和其它计算重叠而提高程序的运行效率。

MPI-3 引进的 MPI.Comm.Create_group 是一个非集合操作,改进了 MPI.Comm.Create 的缺陷,它可以在某个通信子上的部分进程参与的情况下下创建一个新的通信子。

方法接口

下面给出这两个新的通信子创建方法的使用接口。

MPI.Comm.Idup(self)

非阻塞地复制当前通信子,返回一个由新创建的通信子 comm_new 和一个 MPI.Request 对象 req 组成的二元 tuple。注意:在没有调用 req 的 Wait,Test 等方法以等待或测试该非阻塞调用完成之前,新通信子 comm_new 并未真正创建成功,不能进行通信工作。

MPI.Comm.Create_group(self, Group group, int tag=0)

在已有通信子 comm 环境下,利用 group 组创建新的通信子 newcomm,但不会复制原通信子中添加的属性信息。是一个非集合操作方法,只要求处于 group 中的所有进程执行这个调用,对那些不在组 group 中的进程,返回的 newcomm 值为 MPI.COMM_NULL。group 参数可以为 MPI.GROUP_NULL。注意:如果 group 不是 comm 所关联组的子集或者不同进程中变量 group 所包含的组内容不同,则会发生错误。tag 参数用来区分对该方法的多次调用。

例程

下面给出这两个新方法的使用例程。

# Idup.py

"""
Demonstrates the usage of Idup and Create_group.

Run this with 4 processes like:
$ mpiexec -n 4 python Idup.py
"""

import numpy as np
from mpi4py import MPI


comm = MPI.COMM_WORLD
rank = comm.Get_rank()

# Idup
comm_dup, req = comm.Idup()
req.Wait()
recv_obj = comm_dup.scatter([1, 2, 3, 4], root=0)
print 'rank %d has %d' % (rank, recv_obj)

# make one process die
if rank == 0:
    # process 0 dies
    exit()
# other processes can still work

# Create_group
# sub_comm = comm.Create(comm.group.Excl([0])) # dead lock for Create
sub_comm1 = comm.Create_group(comm.group.Excl([0])) # OK for Create_group

print 'sub_comm1.rank %d   <->   comm.rank %d' % (sub_comm1.rank, rank)

sub_comm2 = comm.Create_group(comm.group.Excl([0, 1])) # OK for Create_group
if rank >=2:
    print 'sub_comm2.rank %d   <->   comm.rank %d' % (sub_comm2.rank, rank)
else:
    print sub_comm2 == MPI.COMM_NULL

sub_comm3 = comm.Create_group(MPI.GROUP_NULL) # OK for Create_group
print sub_comm3 == MPI.COMM_NULL

运行结果如下:

$ mpiexec -n 4 python Idup.py
rank 1 has 2
sub_comm1.rank 0   <->   comm.rank 1
True
True
rank 2 has 3
sub_comm1.rank 1   <->   comm.rank 2
sub_comm2.rank 0   <->   comm.rank 2
True
rank 3 has 4
sub_comm1.rank 2   <->   comm.rank 3
sub_comm2.rank 1   <->   comm.rank 3
True
rank 0 has 1

以上介绍了 MPI-3 中引进的非阻塞通信子复制和组集合通信子创建方法,在下一篇中我们将介绍 MPI-3 中增强的单边通信方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容