優(yōu)勝?gòu)倪x擇開始,我們是您最好的選擇!—— 中州期刊聯(lián)盟(新鄉(xiāng)市博翰文化傳媒有限公司)
0373-5939925
2851259250@qq.com
我要檢測(cè) 我要投稿 合法期刊查詢

MPI編程的對(duì)象模型

作者:葛啟云來(lái)源:原創(chuàng)日期:2012-08-11人氣:1811
從理論上來(lái)說(shuō),MPI所有的通信功能可以用它的六個(gè)基本的調(diào)用來(lái)實(shí)現(xiàn):MPI初始化,它是MPI程序的第一個(gè)調(diào)用,完成MPI程序的所有初始化工作。MPI結(jié)束,它是MPI程序的最后一個(gè)調(diào)用,它是MPI程序的最后一條可執(zhí)行語(yǔ)句,否則程序的運(yùn)行結(jié)果實(shí)不可預(yù)知的。當(dāng)前進(jìn)程標(biāo)識(shí),這一調(diào)用返回調(diào)用進(jìn)程在給定的通信域中的進(jìn)程標(biāo)識(shí)號(hào),有了這一標(biāo)識(shí)號(hào),不同的進(jìn)程就可以將自身和其它的進(jìn)程區(qū)別開來(lái),實(shí)現(xiàn)各進(jìn)程的并行和協(xié)作。在MPI中,進(jìn)程標(biāo)識(shí)號(hào)是從0開始編號(hào)的。通信子(Communicator)包括通信組和通信上下文。通信組即所有參與通信的進(jìn)程的集合,通信上下文提供一個(gè)相對(duì)獨(dú)立的通信區(qū)域,不同的消息在通信的上下文中進(jìn)行傳遞,不同上下文的消息互不干涉。通訊域包含的進(jìn)程數(shù),這一調(diào)用返回給定的通信域中所包含的進(jìn)程的個(gè)數(shù),不同的進(jìn)程通過(guò)這一調(diào)用得知在給定的通信域中一共有多少個(gè)進(jìn)程在并行執(zhí)行。消息發(fā)送,把緩沖區(qū)中coun個(gè)datatype數(shù)據(jù)類型的數(shù)據(jù)發(fā)送到目的進(jìn)程dest,本次發(fā)送的消息標(biāo)識(shí)是tag,使用這一標(biāo)識(shí),可以把本次發(fā)送的消息和本進(jìn)程向同一目的進(jìn)程發(fā)送的其它消息區(qū)別開來(lái)。發(fā)送緩沖區(qū)是由count個(gè)類型為datatype的連續(xù)數(shù)據(jù)空間組成,起始地址為buf。其中datatype數(shù)據(jù)類型可以是MPI的預(yù)定義類型,也可以是用戶自定義的類型。消息接收,從指定的進(jìn)程source接收消息,并且該消息的數(shù)據(jù)類型和消息標(biāo)識(shí)和本接收進(jìn)程指定的datatype和tag相一致,接收到的消息所包含的數(shù)據(jù)元素的個(gè)數(shù)最多不能超過(guò)count。接收緩沖區(qū)是由count個(gè)類型為datatype的連續(xù)元素空間組成,由datatype指定其類型,起始地址為buf.接收消息的長(zhǎng)度必須小于或等于接收緩沖區(qū)的長(zhǎng)度,這是因?yàn)槿绻邮盏降臄?shù)據(jù)過(guò)大,MPI沒(méi)有截?cái)?,接收緩沖區(qū)會(huì)發(fā)生溢出錯(cuò)誤,因此編程者要保證接收緩沖區(qū)的長(zhǎng)度不小于發(fā)送數(shù)據(jù)的長(zhǎng)度。
MPI的兩種最基本的并行程序設(shè)計(jì)模式是對(duì)等模式和主從模式??梢哉f(shuō)絕大部分MPI的程序都是這兩種模式之一或二者的組合。MPI程序一般是SPMD程序,當(dāng)然也可以用MPI來(lái)編寫MPMD程序,但是,所有的MPMD程序,都可以用SPMD程序來(lái)表達(dá),二者的表達(dá)能力是相同的。
三、MPI的對(duì)象化
由上節(jié)的描述可知,每個(gè)并行程序的開始都都需要初始化MPI運(yùn)行環(huán)境,而程序最終需要退出MPI環(huán)境,而每個(gè)進(jìn)程都需要知道他在通信域的大小及其在通信域內(nèi)的序號(hào),因此我們將MPI包裝成一個(gè)類CMPIObject,
CMPIObject.h
#includeintgetRank();
intgetSize();
inlineintsendArray(double*,intcount,intdest,inttag);
inlinetintrecvArray(double*,intcout,intsource,inttah);//等等,其他函數(shù)}
該類在構(gòu)造函數(shù)時(shí)初始化MPI環(huán)境,在析構(gòu)函數(shù)中推出MPI環(huán)境,如下代碼演示了,如何構(gòu)造CMPIObject對(duì)象。
//##########CMPIObject.cpp#########//
CMPIObject::CMPIObject(){
MPI_Init():
MPI_Comm_rank(MPI_COMM_WORLD,&m_nRank);
MPI_Comm_size(MPI_COMM_WORLD,&m_nSize);}
CMPIObject::~CMPIObject{MPI_Finalize();}
使用如上CMPIObject類,簡(jiǎn)化了MPI庫(kù)函數(shù)的應(yīng)用,有助于MPI在面向?qū)ο蟪绦蛑械膽?yīng)用。
四、總結(jié)
面向?qū)ο缶幊趟枷胧悄壳败浖J降闹髁鳎哂泻芎玫闹赜眯?。將MPI庫(kù)函數(shù)用類包裝,可以方便研究人員使用。本文為MPI的包裝提供了一個(gè)很好的構(gòu)想,希望后繼者能夠?qū)⑵渫晟啤?

網(wǎng)絡(luò)客服QQ: 沈編輯

投訴建議:0373-5939925????投訴建議QQ:

招聘合作:2851259250@qq.com (如您是期刊主編、文章高手,可通過(guò)郵件合作)

地址:河南省新鄉(xiāng)市金穗大道東段266號(hào)中州期刊聯(lián)盟 ICP備案號(hào):豫ICP備2020036848

【免責(zé)聲明】:中州期刊聯(lián)盟所提供的信息資源如有侵權(quán)、違規(guī),請(qǐng)及時(shí)告知。

版權(quán)所有:中州期刊聯(lián)盟(新鄉(xiāng)市博翰文化傳媒有限公司)

關(guān)注”中州期刊聯(lián)盟”公眾號(hào)
了解論文寫作全系列課程

核心期刊為何難發(fā)?

論文發(fā)表總嫌貴?

職院?jiǎn)挝话l(fā)核心?

掃描關(guān)注公眾號(hào)

論文發(fā)表不再有疑惑

論文寫作全系列課程

掃碼了解更多

輕松寫核心期刊論文

在線留言