mpi4py 點(diǎn)到點(diǎn)通信之就緒阻塞通信模式

上一篇中我們介紹 mpi4py 中緩沖阻塞通信模式跨琳,下面我們將介紹就緒阻塞通信模式饶套。

在就緒通信模式下祟峦,僅當(dāng)對(duì)方的接收操作啟動(dòng)并準(zhǔn)備就緒時(shí)窃页,才可發(fā)送數(shù)據(jù)矢棚,否則可能導(dǎo)致錯(cuò)誤或無(wú)法預(yù)知的結(jié)果郑什。從語(yǔ)義上講,就緒發(fā)送方式與同步和標(biāo)準(zhǔn)發(fā)送完全一致幻妓,這個(gè)動(dòng)作僅僅是向 MPI 環(huán)境傳遞了一個(gè)額外的信息蹦误,告訴它對(duì)方的接收動(dòng)作已經(jīng)“就緒”,不必顧慮肉津,而可直接了當(dāng)執(zhí)行相應(yīng)的發(fā)送操作强胰。基于這個(gè)信息可避免一系列的緩沖操作以及收/發(fā)雙方的握手操作妹沙,使得 MPI 環(huán)境可對(duì)通信做更細(xì)致的優(yōu)化以提高通信效率偶洋。對(duì)發(fā)送方而言,這也意味著發(fā)送緩沖區(qū)在發(fā)送函數(shù)返回之后即可被安全地用于其它操作距糖。

下面是 mpi4py 中用于就緒阻塞點(diǎn)到點(diǎn)通信的方法接口(MPI.Comm 類的方法)玄窝,注意:在就緒通信模式中只有只有以大寫(xiě)字母開(kāi)頭的 Rsend牵寺,沒(méi)有以小寫(xiě)字母開(kāi)頭的 rsend。

Rsend(self, buf, int dest, int tag=0)
Recv(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None)

這些方法調(diào)用中的參數(shù)是與標(biāo)準(zhǔn)通信模式的方法調(diào)用參數(shù)一樣的恩脂。

下面分別給出 Rsend/Recv 的使用例程帽氓。

# Rsend_Recv.py

import numpy as np
from mpi4py import MPI


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

count = 10
send_buf = np.arange(count, dtype='i')
recv_buf = np.empty(count, dtype='i')

if rank == 0:
    comm.Rsend(send_buf, dest=1, tag=11)
    print 'process %d sends %s' % (rank, send_buf)
elif rank == 1:
    comm.Recv(recv_buf, source=0, tag=11)
    print 'process %d receives %s' % (rank, recv_buf)

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

$ mpiexec -n 2 python Rsend_Recv.py
process 0 sends [0 1 2 3 4 5 6 7 8 9]
process 1 receives [0 1 2 3 4 5 6 7 8 9]

因?yàn)闆](méi)有以小寫(xiě)字母開(kāi)頭的 rsend,所以不能直接地發(fā)送通用的 Python 對(duì)象俩块,但是我們可以手動(dòng)地將其 pickle 系列化之后再用 Rsend 發(fā)送黎休,如下:

# Rsend_Recv_obj.py

import pickle
from mpi4py import MPI


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

send_obj = {'a': [1, 2.4, 'abc', -2.3+3.4J],
            'b': {2, 3, 4}}

recv_buf = bytearray(2000) # pre-allocate a buffer for message receiving

if rank == 0:
    comm.Rsend(pickle.dumps(send_obj), dest=1, tag=11)
    print 'process %d sends %s' % (rank, send_obj)
elif rank == 1:
    comm.Recv(recv_buf, source=0, tag=11)
    print 'process %d receives %s' % (rank, pickle.loads(recv_buf))

    # or simply use comm.recv
    # recv_obj = comm.recv(source=0, tag=11)
    # print 'process %d receives %s' % (rank, recv_obj)

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

$ mpiexec -n 2 python Rsend_Recv_obj.py
process 0 sends {'a': [1, 2.4, 'abc', (-2.3+3.4j)], 'b': set([2, 3, 4])}
process 1 receives {'a': [1, 2.4, 'abc', (-2.3+3.4j)], 'b': set([2, 3, 4])}

上面兩個(gè)例程并不能確保通信的安全,如果進(jìn)程0恰好在進(jìn)程1執(zhí)行到接收動(dòng)作之前即啟動(dòng)了發(fā)送動(dòng)作玉凯,則可能會(huì)報(bào)錯(cuò)势腮,因此在實(shí)際應(yīng)用中,如果采用就緒的通信模式漫仆,應(yīng)該確保對(duì)方的接收操作啟動(dòng)并準(zhǔn)備就緒后再發(fā)送數(shù)據(jù)捎拯。

上面我們介紹 mpi4py 中就緒阻塞通信模式,在下一篇中我們將介紹同步阻塞通信模式盲厌。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末署照,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子狸眼,更是在濱河造成了極大的恐慌藤树,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拓萌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡升略,警方通過(guò)查閱死者的電腦和手機(jī)微王,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)品嚣,“玉大人炕倘,你說(shuō)我怎么就攤上這事『渤牛” “怎么了罩旋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)眶诈。 經(jīng)常有香客問(wèn)我涨醋,道長(zhǎng),這世上最難降的妖魔是什么逝撬? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任浴骂,我火速辦了婚禮,結(jié)果婚禮上宪潮,老公的妹妹穿的比我還像新娘溯警。我一直安慰自己趣苏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布梯轻。 她就那樣靜靜地躺著食磕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喳挑。 梳的紋絲不亂的頭發(fā)上彬伦,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音蟀悦,去河邊找鬼媚朦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛日戈,可吹牛的內(nèi)容都是我干的询张。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼浙炼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼份氧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起弯屈,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蜗帜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后资厉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體厅缺,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年宴偿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了湘捎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窄刘,死狀恐怖窥妇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娩践,我是刑警寧澤活翩,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站翻伺,受9級(jí)特大地震影響材泄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜穆趴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一脸爱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧未妹,春花似錦簿废、人聲如沸空入。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)歪赢。三九已至,卻和暖如春单料,著一層夾襖步出監(jiān)牢的瞬間埋凯,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工扫尖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留白对,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓换怖,卻偏偏與公主長(zhǎng)得像甩恼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沉颂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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

  • 在上一篇中我們介紹了 mpi4py 中標(biāo)準(zhǔn)阻塞通信模式条摸,下面我們將介紹緩沖阻塞通信模式。 緩沖通信模式主要用于解開(kāi)...
    自可樂(lè)閱讀 2,843評(píng)論 0 5
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,077評(píng)論 25 707
  • 轉(zhuǎn)自: http://www.reibang.com/p/486b0965c296 http://www.jia...
    demop閱讀 3,886評(píng)論 1 21
  • 2017-02-26學(xué)幾首學(xué)校要求背誦的古詩(shī)铸屉。 這幾天天氣很冷钉蒲,加上兩個(gè)孩子都感冒流鼻涕咳嗽,似乎自己的心態(tài)又不淡...
    廈門(mén)琦心媽閱讀 210評(píng)論 1 2
  • 今天是參加好報(bào)30天寫(xiě)作群的第二十六天彻坛。近一個(gè)月來(lái)顷啼,總算堅(jiān)持了一件事,沒(méi)有缺席過(guò)昌屉,沒(méi)有給自己找個(gè)借口线梗,無(wú)論時(shí)間多...
    巴蜀寶貝閱讀 168評(píng)論 0 0