2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論