在上一篇中我們介紹了 mpi4py 中的動(dòng)態(tài)進(jìn)程管理摩渺,下面我們將介紹單邊通信墩剖。
簡(jiǎn)介
單邊通信又稱作遠(yuǎn)端內(nèi)存訪問(wèn)(Remote Memory Access塘淑,RMA)盐须,在此通信模式下,一個(gè)進(jìn)程可控制和訪問(wèn)遠(yuǎn)端進(jìn)程的內(nèi)存空間衔瓮,而遠(yuǎn)端進(jìn)程可不必關(guān)心其內(nèi)存被訪問(wèn)的情況浊猾。單邊通信能夠?qū)?shù)據(jù)交換和同步進(jìn)行解耦,交換數(shù)據(jù)時(shí)不需要遠(yuǎn)端進(jìn)程進(jìn)行同步报辱。
遠(yuǎn)端內(nèi)存訪問(wèn)由一個(gè)進(jìn)程單方面指定所有通信參數(shù)与殃,且不需要發(fā)送/接收操作配對(duì)单山。與此不同的是碍现,點(diǎn)到點(diǎn)通信中對(duì)于配對(duì)進(jìn)程無(wú)法知道通信參數(shù)的情況,則只能通過(guò)全局通信的方式進(jìn)行通知米奸,較難處理昼接。點(diǎn)到點(diǎn)通信模式如需實(shí)現(xiàn)對(duì)方進(jìn)程無(wú)法預(yù)知的訪問(wèn)操作,則必須通過(guò)額外的等待/查詢機(jī)制輔助完成悴晰。
簡(jiǎn)而言之慢睡,單邊通信的優(yōu)點(diǎn)如下:
- 一些不規(guī)則的通信模式可以更容易實(shí)現(xiàn),不需要額外的步驟來(lái)確定要進(jìn)行多少次 Send/Recv铡溪;
- 如果系統(tǒng)硬件支持遠(yuǎn)端內(nèi)存訪問(wèn)漂辐,可以比 Send/Recv 獲得更好的性能。
點(diǎn)到點(diǎn)通信或集合通信都直接或間接實(shí)現(xiàn)了兩種效果——消息從發(fā)送端流向接收端棕硫;在發(fā)送和接收端之間實(shí)施一次同步髓涯。而遠(yuǎn)端內(nèi)存訪問(wèn)則將這兩個(gè)工作分割成彼此獨(dú)立的功能。
遠(yuǎn)端內(nèi)存訪問(wèn)提供 3 種操作——Put(寫(xiě))哈扮、Get(讀)和 Accumulate(更新)纬纪,以及多組同步操作用以控制內(nèi)存訪問(wèn)順序蚓再。
為統(tǒng)一概念,在遠(yuǎn)端內(nèi)存訪問(wèn)操作中包各,仍將發(fā)起動(dòng)作的進(jìn)程稱作源(origin)摘仅,而內(nèi)存被訪問(wèn)的進(jìn)程稱作目的(target)。
使用方式
注意:遠(yuǎn)端內(nèi)存訪問(wèn)僅適用于組內(nèi)通信子對(duì)象问畅。
在開(kāi)始工作之前娃属,參與通信的所有進(jìn)程需“聲明”一個(gè)用于通信的“窗口”,在聲明窗口時(shí)护姆,各進(jìn)程分別指定屬于自己窗口的屬性——起始地址和大小膳犹。聲明操作返回一個(gè) PI.Win 類的對(duì)象,所有遠(yuǎn)端內(nèi)存訪問(wèn)操作都借助此對(duì)象實(shí)施签则。通信時(shí)须床,按照相應(yīng)的語(yǔ)義,在 MPI.Win 上下文內(nèi)渐裂,指定起始地址豺旬、偏移、數(shù)量等即可柒凉。兩個(gè)進(jìn)程可直接訪問(wèn)對(duì)方窗口來(lái)交互信息族阅,也可借助第三方進(jìn)程窗口中轉(zhuǎn)實(shí)現(xiàn)通信。
單邊通信的使用大概遵循以下三個(gè)步驟:
- 創(chuàng)建 MPI.Win 窗口對(duì)象膝捞,聲明用于可被其他進(jìn)程訪問(wèn)的內(nèi)存區(qū)域坦刀;
- 執(zhí)行通信操作,可以是從遠(yuǎn)程進(jìn)程上讀蔬咬、寫(xiě)鲤遥、更新等;
- 對(duì)單邊通信完成情況進(jìn)行等待或者檢查等操作林艘。
以上我們簡(jiǎn)要地介紹了 mpi4py 中的單邊通信概念盖奈,在下一篇中我們將介紹單邊通信的相關(guān)操作。