版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、MPI簡介MPI及其歷史消息傳遞接口(Message Passing Interface,簡稱MPI)是一種編程接口標(biāo)準(zhǔn),而不是一種具體的編程語言。由消息傳遞接口論壇(Message Passing Interface Forum,簡稱MPIF)發(fā)起討論并進(jìn)行規(guī)范化的。MPI標(biāo)準(zhǔn)如今已經(jīng)成為事實(shí)意義上的消息傳遞并行編程標(biāo)準(zhǔn),也是最為流行的并行編程接口。MPI標(biāo)準(zhǔn)定義了一組具有可移植性的編程接口。典型的實(shí)現(xiàn)包括開源的MPICH、LAM MPI以及不開源的INTEL MPI。MPICH由美國Argonne國家實(shí)驗(yàn)室開發(fā),影響最大、用戶最多的MPI實(shí)現(xiàn)開源與MPI標(biāo)準(zhǔn)同步發(fā)展支持多程序多數(shù)據(jù)編程和異
2、構(gòu)集群系統(tǒng)支持c/c+,fortran 77和fortran 90。支持類UNIX和windows NT平臺(tái)支持環(huán)境廣泛,包括多核、SMP、集群和大規(guī)模并行計(jì)算系統(tǒng)軟件包繼承了并行程序設(shè)計(jì)環(huán)境組件Intel MPI提供Direct Access Programming Library (DAPL) 中間層支持,有效的支持多種高性能互聯(lián)系統(tǒng)透明的支持TCP/IP、共享內(nèi)存優(yōu)點(diǎn):無需對通信協(xié)議的選擇進(jìn)行額外設(shè)置,可以自動(dòng)選擇MPI間最快的傳輸協(xié)議MPI程序特點(diǎn)消息傳遞指的是并行執(zhí)行的各個(gè)進(jìn)程具有自己獨(dú)立的堆棧和代碼段。進(jìn)程之間通過顯式地調(diào)用通信函數(shù)來完成。分類:單程序多數(shù)據(jù)(Single Prog
3、ram Multiple Data,簡稱SPMD)prog_aLoadProcessStoreprocess 0process 1process 2LoadProcessGatherStoreMPI程序特點(diǎn)(續(xù))多程序多數(shù)據(jù)MPMD(a) MPMDMaster/Worker(b) MPMDCoupled AnalysisNode 1Node 2Node 3Node 1Node 2Node 3prog_aprog_bprog_aprog_bprog_c(c) MPMDStreamlineprog_aprog_bprog_cNode 1Node 2Node 3MPI程序的四個(gè)基本函數(shù)MPI_Ini
4、t和MPI_FinalizeMPI_Init初始化MPI執(zhí)行環(huán)境,建立多個(gè)MPI進(jìn)程之間的聯(lián)系,為后續(xù)通信做準(zhǔn)備。而MPI_Finalize則是結(jié)束MPI執(zhí)行環(huán)境。MPI_Comm_rank來標(biāo)識(shí)各個(gè)MPI進(jìn)程MPI_Comm_size用來標(biāo)識(shí)相應(yīng)進(jìn)程組中有多少個(gè)進(jìn)程MPI編程基礎(chǔ)簡單的MPI程序示例#include #include mpi.hint main( int argc, char *argv ) int rank;int size; MPI_Init( argc, argv ); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_siz
5、e(MPI_COMM_WORLD, &size); printf( Hello world from process %d of %dn, rank, size ); MPI_Finalize(); return 0;Hello world from process 0 of 4 Hello world from process 1 of 4 Hello world from process 2 of 4 Hello world from process 3 of 4MPI的點(diǎn)對點(diǎn)通信兩個(gè)最重要的MPI函數(shù)MPI_Send和MPI_Recv。int MPI_SEND(buf, count, d
6、atatype, dest, tag, comm)這個(gè)函數(shù)的含義是向通信域comm中的dest進(jìn)程發(fā)送數(shù)據(jù)。消息數(shù)據(jù)存放在buf中,類型是datatype,個(gè)數(shù)是count個(gè)。這個(gè)消息的標(biāo)志是tag,用以和本進(jìn)程向同一目的進(jìn)程發(fā)送的其他消息區(qū)別開來。int MPI_RECV(buf,count,datatype,source,tag,comm,status)MPI_Recv絕大多數(shù)的參數(shù)和MPI_Send相對應(yīng),有相同的意義,很好理解。唯一的區(qū)別就是MPI_Recv里面多了一個(gè)參數(shù)status。status主要顯示接收函數(shù)的各種錯(cuò)誤狀態(tài)。消息管理7要素MPI最重要的功能莫過于消息傳遞。正如我們
7、先前看到一樣,MPI_Send和MPI_Recv負(fù)責(zé)在兩個(gè)進(jìn)程間發(fā)送和接收消息??偨Y(jié)起來,點(diǎn)對點(diǎn)消息通信的參數(shù)主要是由以下7個(gè)參數(shù)組成:發(fā)送或者接收緩沖區(qū)buf;數(shù)據(jù)數(shù)量count;數(shù)據(jù)類型datatype;目標(biāo)進(jìn)程或者源進(jìn)程destination/source;消息標(biāo)簽tag;通信域comm;.消息狀態(tài)字status,只在接收的函數(shù)中出現(xiàn)。消息管理7要素 消息數(shù)據(jù)類型原因支持異構(gòu)平臺(tái)計(jì)算將非連續(xù)內(nèi)存區(qū)中的數(shù)據(jù)、具有不同數(shù)據(jù)類型的內(nèi)容組成消息基本數(shù)據(jù)類型與C語言對應(yīng)關(guān)系(參考表7.3)與fortran77對應(yīng)關(guān)系(參考表7.4)導(dǎo)出數(shù)據(jù)類型將不連續(xù)的、甚至不同類型的數(shù)據(jù)元素組合在一起形成新的數(shù)
8、據(jù)類型需要用戶使用MPI提供的構(gòu)造函數(shù)使用規(guī)則有類型數(shù)據(jù)的通信,發(fā)送方和接收方均使用相同的數(shù)據(jù)類型無類型數(shù)據(jù)的通信,發(fā)送方和接收方均已MPI_BYTE為數(shù)據(jù)類型打包數(shù)據(jù)通信,發(fā)送方和接收方均使用消息管理7要素 消息標(biāo)簽作用 程序在同一接收者的情況下,用來標(biāo)識(shí)不同類型消息的一個(gè)整數(shù)。實(shí)例 Process P: send (A, 32, Q); send (B, 16, Q) Process Q: recv (X, 32, P); recv (Y, 16, P) Process P: send (A, 32, Q, tag1); send (B, 16, Q, tag2) Process Q: r
9、ecv (X, 32, P, tag1); recv (Y, 16, P, tag2)消息管理7要素 通信域一個(gè)通信域包含一個(gè)進(jìn)程組及其上下文,限定了消息傳遞的范圍進(jìn)程組是有限有序集,編號(hào) 0,1,2,。,n-1組大小和進(jìn)程號(hào)分別通過MPI_comm_size和MPI_comm_rank獲得兩個(gè)預(yù)定義的組MPI_COMM_SELF 和 MPI_COMM_WORLD管理函數(shù):通信域比較 int MPI_comm_compare(comm1, comm2, result)通信域復(fù)制 int MPI_comm_dup(comm, newcom)通信域分裂 int MPI_comm_split(com
10、m, color, key, newcomm)通信域銷毀 int MPI_comm_free(comm)消息管理的7要素 狀態(tài)字Status結(jié)構(gòu)定義Typedef struct MPI_Status int count; int cancelled; int MPI_SOURCE; /發(fā)送的數(shù)據(jù)進(jìn)程號(hào) int MPI_TAG; /發(fā)送數(shù)據(jù)使用的tag int MPI_ERROR; /錯(cuò)誤代碼MPI_Status消息管理的7要素 狀態(tài)字實(shí)例 while(true) MPI_Recv(received_request, 100, MPI_BYTE, MPI_ANY_SOURCE, MPI_ANY_
11、TAG, comm, &status);Switch(Status. MPI_TAG) case tag_0: perform service type0; case tag_1: perform service type1; case tag_2: perform service type2;統(tǒng)計(jì)時(shí)間MPI提供了兩個(gè)時(shí)間函數(shù) MPI_Wtime :返回雙精度數(shù),標(biāo)識(shí)從過去的某點(diǎn)的時(shí)間到當(dāng)前時(shí)間所消耗的時(shí)間秒數(shù)MPI_Wtick:返回MPI_Wtime函數(shù)結(jié)果的精度例子:。T1= MPI_Wtime();.T2=MPI_Wtime();T=T2-T1;錯(cuò)誤管理MPI在錯(cuò)誤管理方面提供了豐富的接
12、口函數(shù),這里我們介紹其中最簡單的部分接口。用status.MPI_ERROR來獲取錯(cuò)誤碼。MPI終止MPI程序執(zhí)行的函數(shù)MPI_Abort。 int MPI_Abort(MPI_Comm comm, int errorcode)它使comm通信域的所有進(jìn)程退出,返回errorcode給調(diào)用的環(huán)境。通信域comm中的任一進(jìn)程調(diào)用此函數(shù)都能夠使該通信域內(nèi)所有的進(jìn)程結(jié)束運(yùn)行。MPI群集通信同步本函數(shù)接口是:int MPI_Barrier(MPI_Comm comm)在操作中,通信子comm中的所有進(jìn)程相互同步,即它們相互等待,直到所有進(jìn)程都執(zhí)行了他們各自的MPI_Barrier函數(shù),然后再各自接著開
13、始執(zhí)行后續(xù)的代碼。廣播從一個(gè)root進(jìn)程向組內(nèi)所有其他的進(jìn)程發(fā)送一條消息。接口是:int MPI_Bcast( void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm )MPI群集通信(續(xù))聚集聚集函數(shù)MPI_Gather是一個(gè)多對一的通信函數(shù)。其接口為:int MPI_Gather(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, M
14、PI_Comm comm)MPI群集通信(續(xù))播撒MPI_Scatter是一對多的傳遞消息。但是它和廣播不同,root進(jìn)程向各個(gè)進(jìn)程傳遞的消息是可以不同的。Scatter實(shí)際上執(zhí)行的是與Gather相反的操作。MPI群集通信(續(xù))擴(kuò)展的聚集和播撒操作MPI_Allgather的作用是每一個(gè)進(jìn)程都收集到其他所有進(jìn)程的消息,它相當(dāng)于每一個(gè)進(jìn)程都執(zhí)行了MPI_Gather執(zhí)行完了MPI_Gather之后,所有的進(jìn)程的接收緩沖區(qū)的內(nèi)容都是相同的,也就是說每個(gè)進(jìn)程給所有進(jìn)程都發(fā)送了一個(gè)相同的消息。int MPI_Allgather(void *sendbuf, int sendcount, MPI_Da
15、tatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)MPI群集通信(續(xù))全局交換MPI_Alltoall的每個(gè)進(jìn)程可以向每個(gè)接收者發(fā)送數(shù)目不同的數(shù)據(jù),第i個(gè)進(jìn)程發(fā)送的第j塊數(shù)據(jù)將被第j個(gè)進(jìn)程接收并存放在其接收消息緩沖區(qū)recvbuf的第i塊,每個(gè)進(jìn)程的sendcount和sendtype的類型必須和所有其他進(jìn)程的recvcount和recvtype相同,這也意謂著在每個(gè)進(jìn)程和根進(jìn)程之間發(fā)送的數(shù)據(jù)量必須和接收的數(shù)據(jù)量相等。int MPI_Alltoall(void *sendbuf
16、, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)MPI群集通信(續(xù))規(guī)約 int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)規(guī)約操作包括:MPI_MAXMPI_MINMPI_SUMMPI_PRODMPI群集通信(續(xù))掃描 int MPI_Scan(void * sendbuf, void * recvbuf, int count, MPI_Datatype data
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年上半年云南省體育局直屬事業(yè)單位招聘人員備考題庫(13人)有完整答案詳解
- 2026廣西玉林市北流市六麻鎮(zhèn)人民政府第一次補(bǔ)充招聘網(wǎng)格信息管理員2人備考題庫帶答案詳解
- 2026北京市通州區(qū)中西醫(yī)結(jié)合醫(yī)院畢業(yè)生招聘備考題庫及參考答案詳解
- 2026中國科學(xué)院遺傳與發(fā)育生物學(xué)研究所楊寶軍研究組招聘1人備考題庫完整參考答案詳解
- 2026河北地質(zhì)大學(xué)選聘30人備考題庫及完整答案詳解1套
- 自媒體高手入門培訓(xùn)課件
- 自動(dòng)駕駛汽車介紹
- 宮外孕破裂出血的急救護(hù)理
- 人工智能在風(fēng)險(xiǎn)預(yù)警中的作用-第12篇
- 2026年重慶資源與環(huán)境保護(hù)職業(yè)學(xué)院單招綜合素質(zhì)考試模擬測試卷附答案
- 安全生產(chǎn)標(biāo)準(zhǔn)化與安全文化建設(shè)的關(guān)系
- DB31-T 1502-2024 工貿(mào)行業(yè)有限空間作業(yè)安全管理規(guī)范
- DL-T5054-2016火力發(fā)電廠汽水管道設(shè)計(jì)規(guī)范
- 2022版義務(wù)教育(物理)課程標(biāo)準(zhǔn)(附課標(biāo)解讀)
- 神經(jīng)外科介入神經(jīng)放射治療技術(shù)操作規(guī)范2023版
- 肺結(jié)核患者合并呼吸衰竭的護(hù)理查房課件
- 安川XRC機(jī)器人CIO培訓(xùn)講議課件
- 地源熱泵施工方案
- 濱海事業(yè)單位招聘2023年考試真題及答案解析1
- 熱電廠主體設(shè)備安裝施工組織設(shè)計(jì)
- GB/T 26784-2011建筑構(gòu)件耐火試驗(yàn)可供選擇和附加的試驗(yàn)程序
評論
0/150
提交評論