MPI-3 非阻塞通信子復(fù)制和組集合通信子創(chuàng)建方法

上一篇中我們介紹了 mpi4py 中的近鄰集合通信方法,下面我們將介紹 mpi4py 中的非阻塞通信子復(fù)制和組集合通信子創(chuàng)建方法。

非阻塞通信子復(fù)制方法 MPI.Comm.Idup 和組集合通信子創(chuàng)建方法 MPI.Comm.Create_group 都是 MPI-3 中新增的通信子創(chuàng)建方法匙睹。

在前面已經(jīng)介紹了 MPI-1 和 MPI-2 中的通信子創(chuàng)建方法听诸,其中 MPI.Comm.Dup 是一個(gè)阻塞的通信子復(fù)制方法,MPI.Comm.Create 是一個(gè)集合通信子創(chuàng)建方法讼载,即處于調(diào)用該方法的通信子內(nèi)的所有進(jìn)程必須共同參與才能完成一個(gè)新的通信子的創(chuàng)建工作,即使所創(chuàng)建的新通信子只包含原通信子里面的部分進(jìn)程中跌。MPI.Comm.Create 的集合操作性在某些情況下可能會(huì)遇到問(wèn)題咨堤,比如說(shuō)只要一個(gè)通信子內(nèi)的某一個(gè)或幾個(gè)進(jìn)程因出錯(cuò)誤而死掉后,所有這個(gè)通信子上的集合操作都無(wú)法進(jìn)行了漩符,因?yàn)榧喜僮饕笸ㄐ抛由系乃羞M(jìn)程共同參與一喘。我們可以考慮將該通信子中正常的進(jìn)程創(chuàng)建成一個(gè)新的通信子,并進(jìn)行后續(xù)的計(jì)算工作嗜暴。一種自然的想法是調(diào)用該通信子的 MPI.Comm.Create 方法凸克,但是因?yàn)槠浼喜僮餍月燎郑覀儫o(wú)法在該通信子的某些進(jìn)程死掉的情況下使用 MPI.Comm.Create 創(chuàng)建一個(gè)新的通信子,而且其它的集合通信子創(chuàng)建方法如 MPI.Comm.Dup触徐,MPI.Comm.Split 等也都無(wú)法使用咪鲜。MPI-1 和 MPI-2 中沒(méi)有提供非集合的通信子創(chuàng)建方法,此限制可能會(huì)導(dǎo)致直到程序退出該通信子上的所有集合操作都無(wú)法進(jìn)行撞鹉。

MPI-3 引進(jìn)的 MPI.Comm.Idup 是 MPI.Comm.Dup 的非阻塞版本疟丙,可以通過(guò)將通信子創(chuàng)建和其它計(jì)算重疊而提高程序的運(yùn)行效率。

MPI-3 引進(jìn)的 MPI.Comm.Create_group 是一個(gè)非集合操作鸟雏,改進(jìn)了 MPI.Comm.Create 的缺陷享郊,它可以在某個(gè)通信子上的部分進(jìn)程參與的情況下下創(chuàng)建一個(gè)新的通信子。

方法接口

下面給出這兩個(gè)新的通信子創(chuàng)建方法的使用接口孝鹊。

MPI.Comm.Idup(self)

非阻塞地復(fù)制當(dāng)前通信子炊琉,返回一個(gè)由新創(chuàng)建的通信子 comm_new 和一個(gè) MPI.Request 對(duì)象 req 組成的二元 tuple。注意:在沒(méi)有調(diào)用 req 的 Wait又活,Test 等方法以等待或測(cè)試該非阻塞調(diào)用完成之前苔咪,新通信子 comm_new 并未真正創(chuàng)建成功,不能進(jìn)行通信工作柳骄。

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

在已有通信子 comm 環(huán)境下团赏,利用 group 組創(chuàng)建新的通信子 newcomm,但不會(huì)復(fù)制原通信子中添加的屬性信息耐薯。是一個(gè)非集合操作方法舔清,只要求處于 group 中的所有進(jìn)程執(zhí)行這個(gè)調(diào)用,對(duì)那些不在組 group 中的進(jìn)程曲初,返回的 newcomm 值為 MPI.COMM_NULL体谒。group 參數(shù)可以為 MPI.GROUP_NULL。注意:如果 group 不是 comm 所關(guān)聯(lián)組的子集或者不同進(jìn)程中變量 group 所包含的組內(nèi)容不同臼婆,則會(huì)發(fā)生錯(cuò)誤抒痒。tag 參數(shù)用來(lái)區(qū)分對(duì)該方法的多次調(diào)用。

例程

下面給出這兩個(gè)新方法的使用例程目锭。

# 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

運(yùn)行結(jié)果如下:

$ 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 中引進(jìn)的非阻塞通信子復(fù)制和組集合通信子創(chuàng)建方法评汰,在下一篇中我們將介紹 MPI-3 中增強(qiáng)的單邊通信方法纷捞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末痢虹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子主儡,更是在濱河造成了極大的恐慌奖唯,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糜值,死亡現(xiàn)場(chǎng)離奇詭異丰捷,居然都是意外死亡坯墨,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)病往,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)捣染,“玉大人,你說(shuō)我怎么就攤上這事停巷∷H粒” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵畔勤,是天一觀的道長(zhǎng)蕾各。 經(jīng)常有香客問(wèn)我,道長(zhǎng)庆揪,這世上最難降的妖魔是什么式曲? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮缸榛,結(jié)果婚禮上吝羞,老公的妹妹穿的比我還像新娘。我一直安慰自己内颗,他們只是感情好脆贵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著起暮,像睡著了一般卖氨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上负懦,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天筒捺,我揣著相機(jī)與錄音,去河邊找鬼纸厉。 笑死系吭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颗品。 我是一名探鬼主播肯尺,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼躯枢!你這毒婦竟也來(lái)了则吟?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤锄蹂,失蹤者是張志新(化名)和其女友劉穎氓仲,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡敬扛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年晰洒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啥箭。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谍珊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出急侥,到底是詐尸還是另有隱情抬驴,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布缆巧,位于F島的核電站布持,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏陕悬。R本人自食惡果不足惜题暖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捉超。 院中可真熱鬧胧卤,春花似錦、人聲如沸拼岳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惜纸。三九已至叶撒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間耐版,已是汗流浹背祠够。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粪牲,地道東北人古瓤。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像腺阳,于是被迫代替她去往敵國(guó)和親落君。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容