版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1,第4 講阻塞通信MPI程序設(shè)計(jì),馬麗生計(jì)算機(jī)與信息工程學(xué)院mls@chzu.edu.cn,2,目錄,就緒通信模式同步通信模式 作業(yè)與實(shí)驗(yàn),3,就緒通信模式,僅當(dāng)對方的接收操作啟動并準(zhǔn)備就緒時,才可發(fā)送數(shù)據(jù),否則可能導(dǎo)致錯誤或無法預(yù)知的結(jié)果。向MPI環(huán)境傳遞一個額外的信息。避免一系列的緩沖操作以及收/發(fā)雙方的握手操作,使得MPI環(huán)境可對通信做更細(xì)致的優(yōu)化以提高通信效率。發(fā)送緩沖區(qū)在發(fā)送函數(shù)返回之后即可重復(fù)使用(可被安全
2、地用于其它操作),4,就緒通信模式,舉例:#include "mpi.h"#include #include #include #define LEN 65539int main( int argc, char *argv[] ){MPI_Comm comm = MPI_COMM_WORLD;int other, tag = 1, size, s1;char *buf;int msg
3、[LEN], rmsg[LEN];int rank;int bufsize;MPI_Init( &argc, &argv );MPI_Comm_rank( MPI_COMM_WORLD, &rank );MPI_Comm_size( MPI_COMM_WORLD, &size );,5,就緒通信模式,if(rank == 0) other = 1;if(rank == 1) ot
4、her = 0;//all processor execute rsend here//printf("Proc:%d before sending chunk of messages\n", rank);fflush(stdout);MPI_Rsend( msg, LEN, MPI_INT, other, tag, comm );printf("Proc:%d sent chunk
5、of messages\n", rank);fflush(stdout);//all processor execute recv here//printf("Proc:%d before receiving chunk of messages\n", rank);fflush(stdout);MPI_Recv( rmsg, LEN, MPI_INT, other, tag, comm, M
6、PI_STATUS_IGNORE );printf("Proc:%d received chunk of messages\n", rank);fflush(stdout);MPI_Finalize();return 0;},6,,#include #include #include #include #include "mpi.h"#define LEN 66666i
7、nt main( int argc, char *argv[] ){MPI_Comm comm = MPI_COMM_WORLD;int other, tag = 1, size;int msg[LEN], rmsg[LEN];int rank;MPI_Init( &argc, &argv );MPI_Comm_rank( MPI_COMM_WORLD, &rank );MPI_C
8、omm_size( MPI_COMM_WORLD, &size );,就緒通信模式,7,就緒通信模式,if rank == 0) other = 1;if(rank == 1) other = 0;if(rank == 1) {//proc 1 execute Rsend here//printf("Proc:%d before rsending chunk of messages\n"
9、;, rank);fflush(stdout);MPI_Rsend( msg, LEN, MPI_INT, other, tag, comm );printf("Proc:%d rsent chunk of messages\n", rank);fflush(stdout);}//add a barrier here will cause error//MPI_Barrier(comm);
10、if(rank == 0) {//proc 0 execute recv here//printf("Proc:%d before receiving chunk of messages\n", rank);fflush(stdout);MPI_Recv( rmsg, LEN, MPI_INT, other, tag, comm, MPI_STATUS_IGNORE );print
11、f("Proc:%d received chunk of messages\n", rank);fflush(stdout);}MPI_Finalize();return 0;},8,就緒通信模式,通信不安全情況發(fā)送和接收同時啟動理論上存在,但實(shí)際很難發(fā)生發(fā)送早于接收出錯發(fā)送遲于接收正常,9,同步通信方式,不論接收端是否啟動了接收動作,發(fā)送端都可在任何時機(jī)啟動發(fā)送動作。發(fā)送動作的結(jié)束不僅意
12、味著發(fā)送緩沖區(qū)已經(jīng)可以用于其它用途,而且還表示接收端也執(zhí)行了一定程度的接收工作。雙方進(jìn)程到達(dá)一個確定的同步點(diǎn)之后,通信才能結(jié)束。阻塞模式的同步發(fā)送動作不是一個”本地“動作,而是一個遠(yuǎn)程節(jié)點(diǎn)相連接的動作。,10,同步通信方式,通信協(xié)議發(fā)送端首先向接收端發(fā)起一個請求發(fā)送消息的申請,接收端的MPI環(huán)境會將這個請求保存下來然后待相應(yīng)的接收動作啟動后為其返回一個信息發(fā)送許可,發(fā)送端據(jù)此信息再執(zhí)行實(shí)際的消息發(fā)送。,11,同步通信方式,舉例#
13、include "mpi.h"#include #include #include #define LEN 65539int main( int argc, char *argv[] ){MPI_Comm comm = MPI_COMM_WORLD;int other, tag = 1, size, s1;char *buf;int msg[LEN], rmsg[LEN];int ra
14、nk;int bufsize;MPI_Init( &argc, &argv );MPI_Comm_rank( MPI_COMM_WORLD, &rank );MPI_Comm_size( MPI_COMM_WORLD, &size );,12,同步通信方式,if(rank == 0) other = 1;if(rank == 1) other = 0;//all process
15、or execute ssend here//printf("Proc:%d before sending chunk of messages\n", rank);fflush(stdout);MPI_Ssend( msg, LEN, MPI_INT, other, tag, comm );printf("Proc:%d sent chunk of messages\n", ran
16、k);fflush(stdout);//all processor execute recv here//printf("Proc:%d before receiving chunk of messages\n", rank);fflush(stdout);MPI_Recv( rmsg, LEN, MPI_INT, other, tag, comm, MPI_STATUS_IGNORE );pr
17、intf("Proc:%d received chunk of messages\n", rank);fflush(stdout);MPI_Finalize();return 0;},13,同步通信方式,#include "mpi.h"#include #include #include #define LEN 65539int main( int argc, char *a
18、rgv[] ){MPI_Comm comm = MPI_COMM_WORLD;int other, tag = 1, size, s1;char *buf;int msg[LEN], rmsg[LEN];int rank;int bufsize;MPI_Init( &argc, &argv );MPI_Comm_rank( MPI_COMM_WORLD, &rank );M
19、PI_Comm_size( MPI_COMM_WORLD, &size );if(rank == 0) other = 1;if(rank == 1) other = 0;,14,同步通信方式,if(rank == 0) {//execution order of proc 0 is ssend|recev//printf("Proc:%d before sending chunk of m
20、essages\n", rank);fflush(stdout);MPI_Ssend( msg, LEN, MPI_INT, other, tag, comm );printf("Proc:%d sent chunk of messages\n", rank);fflush(stdout);printf("Proc:%d before receiving chunk of
21、messages\n", rank);fflush(stdout);MPI_Recv( rmsg, LEN, MPI_INT, other, tag, comm, MPI_STATUS_IGNORE );printf("Proc:%d after receiving chunk of messages\n", rank);fflush(stdout);},15,同步通信方式,if(rank
22、== 1) {//execution order of proc 1 is recev|ssend//printf("Proc:%d before receiving chunk of messages\n", rank);fflush(stdout);MPI_Recv( rmsg, LEN, MPI_INT, other, tag, comm, MPI_STATUS_IGNORE );
23、printf("Proc:%d received chunk of messages\n", rank);fflush(stdout);printf("Proc:%d before ssending chunk of messages\n", rank);fflush(stdout);MPI_Ssend( msg, LEN, MPI_INT, other, tag, comm );
24、printf("Proc:%d ssent chunk of messages\n", rank);fflush(stdout);}MPI_Finalize();return 0;},16,同步通信方式,幾種情況發(fā)送和接收同時啟動理論上允許其存在發(fā)送早于接收發(fā)送端等待,直到接收端啟動了MPI_Recv,發(fā)送動作才可以返回。發(fā)送遲于接收接收端阻塞等待。,17,總結(jié),各種通信模式,其發(fā)送操
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第4章 程序設(shè)計(jì).PDF
- 第4章 程序設(shè)計(jì).PDF
- 基于MPI的并行程序設(shè)計(jì)技術(shù).pdf
- c語言 第3講順序結(jié)構(gòu)程序設(shè)計(jì)
- 第4章arm程序設(shè)計(jì)基礎(chǔ)
- 第32講程序設(shè)計(jì)與軟件開發(fā)基礎(chǔ)
- 第32講程序設(shè)計(jì)與軟件開發(fā)基礎(chǔ)
- 基于javasocket通信程序設(shè)計(jì)
- 串行異步通信程序設(shè)計(jì)
- 通信網(wǎng)絡(luò)程序設(shè)計(jì)(王曉東西電版)第8章多線程程序設(shè)計(jì)技術(shù)
- 第4卷圖形驅(qū)動程序設(shè)計(jì)
- 第4卷圖形驅(qū)動程序設(shè)計(jì)
- 第1單元程序與程序設(shè)計(jì)
- 第1單元程序與程序設(shè)計(jì)
- c語言程序設(shè)計(jì)ppt-第2版-第7章-指針程序設(shè)計(jì)
- 4最簡單的c程序設(shè)計(jì)順序程序設(shè)計(jì)1
- web程序設(shè)計(jì)_第6章__web數(shù)據(jù)庫程序設(shè)計(jì)
- c語言程序設(shè)計(jì)ppt課件_第2章_簡單程序設(shè)計(jì)-
- 站控通信規(guī)約和通信管理機(jī)通信程序設(shè)計(jì)
- 實(shí)驗(yàn)4 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
評論
0/150
提交評論