版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
消息傳遞并行程序設(shè)計1第一頁,共六十五頁,編輯于2023年,星期三第八章消息傳遞并行程序設(shè)計8.1引言8.26個基本函數(shù)組成的MPI子集8.3MPI消息8.4點對點通信8.5群集通信2第二頁,共六十五頁,編輯于2023年,星期三8.1引言MPI(MessagePassingInterface)是一個消息傳遞接口標(biāo)準(zhǔn),具有多種不同的免費、高效、實用的實現(xiàn)版本MPI提供一個可移植、高效、靈活的消息傳遞接口庫MPI以語言獨立的形式存在,可運行在不同的操作系統(tǒng)和硬件平臺上幾乎所有的并行計算機(jī)廠商都提供對它的支持,成為了事實上的并行編程標(biāo)準(zhǔn)MPI提供與C和Fortran語言的綁定3第三頁,共六十五頁,編輯于2023年,星期三引言MPI標(biāo)準(zhǔn)產(chǎn)生于1992年4月MPI是一個庫,而不是一門語言,因此對MPI的使用必須和特定的語言結(jié)合起來進(jìn)行MPI的版本MPICH:最重要的一種MPI實現(xiàn),免費獲取網(wǎng)址:/mpi/mpichLAM(LocalAreaMulticomputer):由美國OhioStateUniversity開發(fā),/downloadCHIMP:由Edinburgh大學(xué)開發(fā)的另外一個免費MPI實現(xiàn),是在EdinburghParallelComputingCenter的支持下進(jìn)行的,ftp://ftp.epcc.ed.ac.uk/pub/packages/chimp/release4第四頁,共六十五頁,編輯于2023年,星期三8.26個基本函數(shù)組成的MPI子集先看一個非常簡單的MPI程序例1:#include"mpi.h"/*MPI頭函數(shù),提供了MPI函數(shù)和數(shù)據(jù)類型的定義*/#include<stdio.h>intmain(intargc,char**argv){intrank,size,tag=1;intsenddata,recvdata;MPI_Statusstatus;MPI_Init(&argc,&argv);/*MPI的初始化函數(shù)*/MPI_Comm_rank(MPI_COMM_WORLD,&rank);/*該進(jìn)程編號*/MPI_Comm_size(MPI_COMM_WORLD,&size);/*總的進(jìn)程數(shù)目*/5第五頁,共六十五頁,編輯于2023年,星期三6個基本函數(shù)組成的MPI子集if(rank==0){senddata=9999;MPI_Send(&senddata,1,MPI_INT,1,tag,MPI_COMM_WORLD);/*發(fā)送數(shù)據(jù)到進(jìn)程1*/}if(rank==1)MPI_Recv(&recvdata,1,MPI_INT,0,tag,MPI_COMM_WORLD,&status);/*從進(jìn)程0接收數(shù)據(jù)*/MPI_Finalize();/*MPI的結(jié)束函數(shù)*/return(0);}6第六頁,共六十五頁,編輯于2023年,星期三6個基本函數(shù)組成的MPI子集1、MPI初始化:通過MPI_Init函數(shù)進(jìn)入MPI環(huán)境并完成所有的初始化工作。intMPI_Init(int*argc,char***argv)2、MPI結(jié)束:通過MPI_Finalize函數(shù)從MPI環(huán)境中退出。intMPI_Finalize(void)7第七頁,共六十五頁,編輯于2023年,星期三6個基本函數(shù)組成的MPI子集3、獲取進(jìn)程的編號:調(diào)用MPI_Comm_rank函數(shù)獲得當(dāng)前進(jìn)程在指定通信域中的編號,將自身與其他程序區(qū)分。intMPI_Comm_rank(MPI_Commcomm,int*rank)4、獲取指定通信域的進(jìn)程數(shù):調(diào)用MPI_Comm_size函數(shù)獲取指定通信域的進(jìn)程個數(shù),確定自身完成任務(wù)比例。intMPI_Comm_size(MPI_Commcomm,int*size)8第八頁,共六十五頁,編輯于2023年,星期三6個基本函數(shù)組成的MPI子集5、消息發(fā)送:MPI_Send函數(shù)用于發(fā)送一個消息到目標(biāo)進(jìn)程。intMPI_Send(void*buf,intcount,MPI_Datatypedatatype,intdest,inttag,MPI_Commcomm)該函數(shù)將起始地址為buf的count個datatype類型的數(shù)據(jù)發(fā)送給目標(biāo)進(jìn)程,目標(biāo)進(jìn)程在通信域comm中的編號由dest標(biāo)識。同時,發(fā)送方在發(fā)送該消息時給它打上一個標(biāo)簽tag,用于把本次發(fā)送的消息和本進(jìn)程發(fā)送給同一目標(biāo)進(jìn)程的其他消息區(qū)分出來9第九頁,共六十五頁,編輯于2023年,星期三6、消息接受:MPI_Recv函數(shù)用于從指定進(jìn)程接收一個消息intMPI_Recv(void*buf,intcount,MPI_Datatypedatatyepe,intsource,inttag,MPI_Commcomm,MPI_Status*status);該函數(shù)從源進(jìn)程接受一個消息,并且該消息的標(biāo)簽應(yīng)該應(yīng)該和參數(shù)tag一致,源進(jìn)程在通信域comm中的編號由source表示。消息接收后存放在起始地址為buf的接受緩沖區(qū)中,該緩沖區(qū)由count個datatype類型的連續(xù)數(shù)據(jù)元素組成;6個基本函數(shù)組成的MPI子集10第十頁,共六十五頁,編輯于2023年,星期三8.3MPI消息一個消息好比一封信消息的內(nèi)容即信的內(nèi)容,在MPI中稱為消息緩沖(MessageBuffer)消息的接收者即信的地址,在MPI中稱為消息信封(MessageEnvelop)11第十一頁,共六十五頁,編輯于2023年,星期三MPI消息MPI中,消息緩沖由三元組<起始地址,數(shù)據(jù)個數(shù),數(shù)據(jù)類型>標(biāo)識消息信封由三元組<源/目標(biāo)進(jìn)程,消息標(biāo)簽,通信域>標(biāo)識三元組的方式使得MPI可以表達(dá)更為豐富的信息,功能更強(qiáng)大12第十二頁,共六十五頁,編輯于2023年,星期三MPI消息(數(shù)據(jù)類型)MPI的消息類型分為兩種:預(yù)定義類型和派生數(shù)據(jù)類型(DerivedDataType)預(yù)定義數(shù)據(jù)類型:MPI支持異構(gòu)計算(HeterogeneousComputing),它指在不同計算機(jī)系統(tǒng)上運行程序,每臺計算機(jī)可能有不同生產(chǎn)廠商,使用不同的處理器和操作系統(tǒng),當(dāng)這些計算機(jī)使用不同的數(shù)據(jù)表示時,如何保證通信雙方的互操作性。MPI通過提供預(yù)定義數(shù)據(jù)類型來解決異構(gòu)計算中的互操作性問題,建立它與具體語言的對應(yīng)關(guān)系。派生數(shù)據(jù)類型:MPI引入派生數(shù)據(jù)類型來定義由數(shù)據(jù)類型不同且地址空間不連續(xù)的數(shù)據(jù)項組成的消息。13第十三頁,共六十五頁,編輯于2023年,星期三MPI預(yù)定義的數(shù)據(jù)類型14第十四頁,共六十五頁,編輯于2023年,星期三MPI附加數(shù)據(jù)類型MPI提供了兩個附加類型:MPI_BYTE和MPI_PACKED
。MPI_BYTE表示一個字節(jié),所有的計算系統(tǒng)中一個字節(jié)都代表8個二進(jìn)制位。MPI_PACKED預(yù)定義數(shù)據(jù)類型被用來實現(xiàn)傳輸?shù)刂房臻g不連續(xù)的數(shù)據(jù)項。15第十五頁,共六十五頁,編輯于2023年,星期三MPI消息(數(shù)據(jù)類型)例2、使用MPI_PACKED發(fā)送地址空間不連續(xù)數(shù)據(jù)項:
doubleA[100];MPI_Pack_size(50,MPI_DOUBLE,MPI_COMM_WORLD,&BufferSize);TempBuffer=malloc(BufferSize);j=sizeof(MPI_DOUBLE);Position=0; for(i=0;i<50;i++) MPI_Pack(A+2*i*j,1,MPI_DOUBLE,TempBuffer,BufferSize,&Position,MPI_COMM_WORLD); MPI_Send(TempBuffer,Position,MPI_PACKED,destination,tag,MPI_COMM_WORLD);
調(diào)用MPI_Pack_size函數(shù)來決定用于存放50個MPI_DOUBLE數(shù)據(jù)項的臨時緩沖區(qū)的大小調(diào)用malloc函數(shù)為這個臨時緩沖區(qū)分配內(nèi)存for循環(huán)中將數(shù)組A的50個偶序數(shù)元素打包成一個消息并存放在臨時緩沖區(qū)16第十六頁,共六十五頁,編輯于2023年,星期三MPI消息(派生數(shù)據(jù)類型)派生數(shù)據(jù)類型可以用類型圖來描述,這是一種通用的類型描述方法,它是一系列二元組<基類型,偏移>的集合,可以表示成如下格式:{<基類型0,偏移0>,···,<基類型n-1,偏移n-1>}在派生數(shù)據(jù)類型中,基類型可以是任何MPI預(yù)定義數(shù)據(jù)類型,也可以是其它的派生數(shù)據(jù)類型,即支持?jǐn)?shù)據(jù)類型的嵌套定義。如圖,陰影部分是基類型所占用的空間,其它空間可以是特意留下的,也可以是為了方便數(shù)據(jù)對齊。17第十七頁,共六十五頁,編輯于2023年,星期三MPI消息(數(shù)據(jù)類型)MPI提供了全面而強(qiáng)大的構(gòu)造函數(shù)(ConstructorFunction)來定義派生數(shù)據(jù)類型。函數(shù)名含義MPI_Type_contiguous定義由相同數(shù)據(jù)類型的元素組成的類型MPI_Type_vector定義由成塊的元素組成的類型,塊之間具有相同間隔MPI_Type_indexed定義由成塊的元素組成的類型,塊長度和偏移由參數(shù)指定MPI_Type_struct定義由不同數(shù)據(jù)類型的元素組成的類型MPI_Type_commit提交一個派生數(shù)據(jù)類型MPI_Type_free釋放一個派生數(shù)據(jù)類型18第十八頁,共六十五頁,編輯于2023年,星期三MPI消息(數(shù)據(jù)類型)例3、使用派生數(shù)據(jù)類型發(fā)送地址空間不連續(xù)數(shù)據(jù)項:doubleA[100];MPI_Data_typeEvenElements;
···MPI_Type_vector(50,1,2,MPI_DOUBLE,&EvenElements);MPI_Type_commit(&EvenElements);MPI_Send(A,1,EvenElements,destination,···);首先聲明一個類型為MPI_Data_type的變量EvenElements調(diào)用構(gòu)造函數(shù)MPI_Type_vector(count,blocklength,stride,oldtype,&newtype)來定義派生數(shù)據(jù)類型新的派生數(shù)據(jù)類型必須先調(diào)用函數(shù)MPI_Type_commit獲得MPI系統(tǒng)的確認(rèn)后才能調(diào)用MPI_Send進(jìn)行消息發(fā)送19第十九頁,共六十五頁,編輯于2023年,星期三MPI消息(數(shù)據(jù)類型)調(diào)用構(gòu)造函數(shù)MPI_Type_vector(count,blocklength,stride,oldtype,&newtype)來定義派生數(shù)據(jù)類型。該newtype由count個數(shù)據(jù)塊組成。而每個數(shù)據(jù)塊由blocklength個oldtype類型的連續(xù)數(shù)據(jù)項組成。參數(shù)stride定義了兩個連續(xù)數(shù)據(jù)塊之間的oldtype類型元素的個數(shù)。因此,兩個塊之間的間隔可以由(stride-blocklength)來表示。MPI_Type_vector(50,1,2,MPI_DOUBLE,&EvenElements)函數(shù)調(diào)用產(chǎn)生了派生數(shù)據(jù)類型EvenElements,它由50個塊組成,每個塊由一個雙精度數(shù)組成,后跟一個MPI_DOUBLE(8字節(jié))的間隔,接在后面的是下一塊。20第二十頁,共六十五頁,編輯于2023年,星期三MPI消息(消息標(biāo)簽)為什么需要消息標(biāo)簽?當(dāng)發(fā)送者連續(xù)發(fā)送兩個相同類型消息給同一個接收者,如果沒有消息標(biāo)簽,接收者將無法區(qū)分這兩個消息這段代碼打算傳送A的前32個字節(jié)進(jìn)入X,傳送B的前16個字節(jié)進(jìn)入Y。但是,盡管消息B后發(fā)送,但可能先到達(dá)進(jìn)程Q,就會被第一個接收函數(shù)接收在X中。使用標(biāo)簽可以避免這個錯誤ProcessP:Send(A,32,Q)Send(B,16,Q)ProcessQ:recv(X,32,P)recv(Y,16,P)ProcessP:send(A,32,Q,tag1)send(B,16,Q,tag2)ProcessQ:recv(X,32,P,tag1)recv(Y,16,P,tag2)21第二十一頁,共六十五頁,編輯于2023年,星期三MPI消息(消息標(biāo)簽)添加標(biāo)簽使得服務(wù)進(jìn)程可以對兩個不同的用戶進(jìn)程分別處理,提高靈活性例4、一個簡單的處理客戶請求的情形22第二十二頁,共六十五頁,編輯于2023年,星期三MPI消息(通信域)通信域(Communicator)包括進(jìn)程組(ProcessGroup)和通信上下文(CommunicationContext)等內(nèi)容,用于描述通信進(jìn)程間的通信關(guān)系。通信域分為組內(nèi)通信域和組間通信域,分別用來實現(xiàn)MPI的組內(nèi)通信(Intra-communication)和組間通信(Inter-communication)。23第二十三頁,共六十五頁,編輯于2023年,星期三MPI消息(通信域)進(jìn)程組是進(jìn)程的有限、有序集。有限意味著,在一個進(jìn)程組中,進(jìn)程的個數(shù)n是有限的,這里的n稱為進(jìn)程組大小(GroupSize)。有序意味著,進(jìn)程的編號是按0,1,…,n-1排列的一個進(jìn)程用它在一個通信域(組)中的編號進(jìn)行標(biāo)識。組的大小和進(jìn)程編號可以通過調(diào)用以下的MPI函數(shù)獲得:MPI_Comm_size(communicator,&group_size)MPI_Comm_rank(communicator,&my_rank)
24第二十四頁,共六十五頁,編輯于2023年,星期三MPI消息(通信域)通信上下文:安全的區(qū)別不同的通信以免相互干擾通信上下文不是顯式的對象,只是作為通信域的一部分出現(xiàn)進(jìn)程組和通信上下文結(jié)合形成了通信域MPI_COMM_WORLD是所有進(jìn)程的集合,在執(zhí)行了MPI_Init函數(shù)之后自動產(chǎn)生,MPI_COMM_WORLD只包含使用它的進(jìn)程25第二十五頁,共六十五頁,編輯于2023年,星期三MPI消息(通信域)MPI提供豐富的函數(shù)用于管理通信域函數(shù)名含義MPI_Comm_size獲取指定通信域中進(jìn)程的個數(shù)MPI_Comm_rank獲取當(dāng)前進(jìn)程在指定通信域中的編號MPI_Comm_compare對給定的兩個通信域進(jìn)行比較MPI_Comm_dup復(fù)制一個已有的通信域生成一個新的通信域,兩者除通信上下文不同外,其它都一樣。MPI_Comm_create根據(jù)給定的進(jìn)程組創(chuàng)建一個新的通信域MPI_Comm_split從一個指定通信域分裂出多個子通信域,每個子通信域中的進(jìn)程都是原通信域中的進(jìn)程。MPI_Comm_free釋放一個通信域26第二十六頁,共六十五頁,編輯于2023年,星期三MPI消息(通信域)一個在MPI中創(chuàng)建新通信域的例子MPI_CommMyWorld,SplitWorld;intmy_rank,group_size,Color,Key;MPI_Init(&argc,&argv);MPI_Comm_dup(MPI_COMM_WORLD,&MyWorld);MPI_Comm_rank(MyWorld,&my_rank);MPI_Comm_size(MyWorld,&group_size);Color=my_rank%3;Key=my_rank/3;MPI_Comm_split(MyWorld,Color,Key,&SplitWorld);27第二十七頁,共六十五頁,編輯于2023年,星期三MPI消息(通信域)MPI_Comm_dup(MPI_COMM_WORLD,&MyWorld)創(chuàng)建了一個新的通信域MyWorld,它包含了與原通信域MPI_COMM_WORLD相同的進(jìn)程組,但具有不同的通信上下文。MPI_Comm_split(MyWorld,Color,Key,&SplitWorld)函數(shù)調(diào)用則在通信域MyWorld的基礎(chǔ)上產(chǎn)生了幾個分割的子通信域。原通信域MyWorld中的進(jìn)程按照不同的Color值處在不同的分割通信域中,每個進(jìn)程在不同分割通信域中的進(jìn)程編號則由Key值來標(biāo)識。
RankinMyWorld0123456789Color0120120120Key0001112223RankinSplitWorld(Color=0)0123RankinSplitWorld(Color=1)012RankinSplitWorld(Color=2)01228第二十八頁,共六十五頁,編輯于2023年,星期三MPI消息(通信域)組間通信域是一種特殊的通信域,該通信域包括了兩個進(jìn)程組,分屬于兩個進(jìn)程組的進(jìn)程之間通過組間通信域?qū)崿F(xiàn)通信。一般把調(diào)用進(jìn)程所在的進(jìn)程組稱為本地進(jìn)程組,而把另外一個稱為遠(yuǎn)程進(jìn)程組。函數(shù)名含義MPI_Comm_test_inter判斷給定的通信域是否為組間通信域MPI_Comm_remote_size獲取指定組間通信域中遠(yuǎn)程進(jìn)程組的大小MPI_Comm_remote_group返回給定組間通信域的遠(yuǎn)程進(jìn)程組MPI_Intercomm_creat根據(jù)給定的兩個組內(nèi)通信域生成一個組間通信域。MPI_Intercomm_merge將給定組間通信域包含的兩個進(jìn)程組合并,形成一個新的組內(nèi)通信域29第二十九頁,共六十五頁,編輯于2023年,星期三MPI消息(消息狀態(tài))消息狀態(tài)(MPI_Status類型)存放接收消息的狀態(tài)信息,包括消息的源進(jìn)程標(biāo)識(MPI_SOURCE)、消息標(biāo)簽(MPI_TAG)、包含的數(shù)據(jù)項個數(shù)(count)以及消息的錯誤接受數(shù)目(MPI_ERROR)它是消息接收函數(shù)MPI_Recv的最后一個參數(shù)當(dāng)一個接收者從不同進(jìn)程接收不同大小和不同標(biāo)簽的消息時,消息的狀態(tài)信息非常有用。30第三十頁,共六十五頁,編輯于2023年,星期三MPI消息(消息狀態(tài))假設(shè)多個客戶進(jìn)程發(fā)送消息給服務(wù)進(jìn)程請求服務(wù),通過消息標(biāo)簽來標(biāo)識客戶進(jìn)程,從而服務(wù)進(jìn)程采取不同的服務(wù)while(true){MPI_Recv(received_request,100,MPI_BYTE,MPI_Any_source,MPI_Any_tag,comm,&Status);switch(Status.MPI_Tag){casetag_0:performservicetype0;casetag_1:performservicetype1;casetag_2:performservicetype2;}}31第三十一頁,共六十五頁,編輯于2023年,星期三8.4點對點通信MPI的點對點通信(‘Point-to-PointCommunication)同時提供了阻塞和非阻塞兩種通信機(jī)制。同時也支持多種通信模式。不同通信模式和不同通信機(jī)制的結(jié)合,便產(chǎn)生了非常豐富的點對點通信函數(shù)。32第三十二頁,共六十五頁,編輯于2023年,星期三點對點通信(通信模式)阻塞和非阻塞通信的主要區(qū)別在于返回后的資源可用性阻塞通信返回的條件:通信操作已經(jīng)完成,及消息已經(jīng)發(fā)送或接收調(diào)用的緩沖區(qū)可用。若是發(fā)送操作,則該緩沖區(qū)可以被其它的操作更新;若是接收操作,該緩沖區(qū)的數(shù)據(jù)已經(jīng)完整,可以被正確引用。33第三十三頁,共六十五頁,編輯于2023年,星期三點對點通信(通信模式)通信模式(CommunicationMode)指的是緩沖管理,以及發(fā)送方和接收方之間的同步方式。共有下面四種通信模式同步(synchronous)通信模式緩沖(buffered)通信模式標(biāo)準(zhǔn)(standard)通信模式就緒(ready)通信模式34第三十四頁,共六十五頁,編輯于2023年,星期三點對點通信(通信模式)同步通信模式:只有相應(yīng)的接收過程已經(jīng)啟動,發(fā)送過程才正確返回。因此,同步發(fā)送返回后,表示發(fā)送緩沖區(qū)中的數(shù)據(jù)已經(jīng)全部被系統(tǒng)緩沖區(qū)緩存,并且已經(jīng)開始發(fā)送。當(dāng)同步發(fā)送返回后,發(fā)送緩沖區(qū)可以被釋放或者重新使用。SRSynchronous12335第三十五頁,共六十五頁,編輯于2023年,星期三點對點通信(通信模式)緩沖通信模式:緩沖通信模式的發(fā)送不管接收操作是否已經(jīng)啟動都可以執(zhí)行。但是需要用戶程序事先申請一塊足夠大的緩沖區(qū),通過MPI_Buffer_attch實現(xiàn),通過MPI_Buffer_detach來回收申請的緩沖區(qū)。SRBuffer1236第三十六頁,共六十五頁,編輯于2023年,星期三點對點通信(通信模式)標(biāo)準(zhǔn)通信模式:是否對發(fā)送的數(shù)據(jù)進(jìn)行緩沖由MPI的實現(xiàn)來決定,而不是由用戶程序來控制。發(fā)送可以是同步的或緩沖的,取決于實現(xiàn)StandardSR137第三十七頁,共六十五頁,編輯于2023年,星期三點對點通信(通信模式)就緒通信模式:發(fā)送操作只有在接收進(jìn)程相應(yīng)的接收操作已經(jīng)開始才進(jìn)行發(fā)送。當(dāng)發(fā)送操作啟動而相應(yīng)的接收還沒有啟動,發(fā)送操作將出錯。就緒通信模式的特殊之處就是接收操作必須先于發(fā)送操作啟動。SRReady1238第三十八頁,共六十五頁,編輯于2023年,星期三點對點通信(通信模式)MPI的發(fā)送操作支持四種通信模式,它們與阻塞屬性一起產(chǎn)生了MPI中的8種發(fā)送操作。而MPI的接收操作只有兩種:阻塞接收和非阻塞接收。非阻塞通信返回后并不意味著通信操作的完成,MPI還提供了對非阻塞通信完成的檢測,主要的有兩種:MPI_Wait函數(shù)和MPI_Test函數(shù)。39第三十九頁,共六十五頁,編輯于2023年,星期三點對點通信(通信模式)MPI的點對點通信操作MPI原語阻塞非阻塞StandardSendMPI_SendMPI_IsendSynchronousSendMPI_SsendMPI_IssendBufferedSendMPI_BsendMPI_IbsendReadySendMPI_RsendMPI_IrsendReceiveMPI_RecvMPI_IrecvCompletionCheckMPI_WaitMPI_Test40第四十頁,共六十五頁,編輯于2023年,星期三點對點通信(通信模式)在阻塞通信的情況下,通信還沒有結(jié)束的時候,處理器只能等待,浪費了計算資源。一種常見的技術(shù)就是設(shè)法使計算與通信重疊,非阻塞通信可以用來實現(xiàn)這一目的。一條三進(jìn)程的流水線,一個進(jìn)程連續(xù)地從左邊的進(jìn)程接收一個輸入數(shù)據(jù)流,計算一個新的值,然后將它發(fā)送給右邊的進(jìn)程。while(Not_Done){MPI_Irevc(NextX,…);MPI_Isend(PreviousY,…);CurrentY=Q(CurrentX);}41第四十一頁,共六十五頁,編輯于2023年,星期三8.5群集通信群集通信(CollectiveCommunications)是一個進(jìn)程組中的所有進(jìn)程都參加的全局通信操作。群集通信一般實現(xiàn)三個功能:通信、聚集和同步。通信功能主要完成組內(nèi)數(shù)據(jù)的傳輸聚集功能在通信的基礎(chǔ)上對給定的數(shù)據(jù)完成一定的操作同步功能實現(xiàn)組內(nèi)所有進(jìn)程在執(zhí)行進(jìn)度上取得一致42第四十二頁,共六十五頁,編輯于2023年,星期三群集通信群集通信,按照通信方向的不同,又可以分為三種:一對多通信,多對一通信和多對多通信。一對多通信:一個進(jìn)程向其它所有的進(jìn)程發(fā)送消息,這個負(fù)責(zé)發(fā)送消息的進(jìn)程叫做Root進(jìn)程。多對一通信:一個進(jìn)程負(fù)責(zé)從其它所有的進(jìn)程接收消息,這個接收的進(jìn)程也叫做Root進(jìn)程。多對多通信:每一個進(jìn)程都向其它所有的進(jìn)程發(fā)送或者接收消息。43第四十三頁,共六十五頁,編輯于2023年,星期三群集通信類型函數(shù)名含義通信MPI_Bcast一對多廣播同樣的消息MPI_Gather多對一收集各個進(jìn)程的消息MPI_GathervMPI_Gather的一般化MPI_Allgather全局收集MPI_AllgathervMPI_Allgather的一般化MPI_Scatter一對多散播不同的消息MPI_ScattervMPI_Scatter的一般化MPI_Alltoall多對多全局交換消息MPI_AlltoallvMPI_Alltoall的一般化聚集MPI_Reduce多對一歸約MPI_AllreduceMPI_Reduce的一般化MPI_Reduce_scatterMPI_Reduce的一般化MPI_Scan掃描同步MPI_Barrier路障同步44第四十四頁,共六十五頁,編輯于2023年,星期三群集通信廣播是一對多通信的典型例子,其調(diào)用格式如下:MPI_Bcast(Address,Count,Datatype,Root,Comm)45第四十五頁,共六十五頁,編輯于2023年,星期三群集通信廣播的特點
標(biāo)號為Root的進(jìn)程發(fā)送相同的消息給通信域Comm中的所有進(jìn)程。消息的內(nèi)容如同點對點通信一樣由三元組<Address,Count,Datatype>標(biāo)識。對Root進(jìn)程來說,這個三元組既定義了發(fā)送緩沖也定義了接收緩沖。對其它進(jìn)程來說,這個三元組只定義了接收緩沖46第四十六頁,共六十五頁,編輯于2023年,星期三群集通信收集是多對一通信的典型例子,其調(diào)用格式下:MPI_Gather(SendAddress,SendCount,SendDatatype,RecvAddress,RecvCount,RecvDatatype,Root,Comm)47第四十七頁,共六十五頁,編輯于2023年,星期三群集通信收集的特點在收集操作中,Root進(jìn)程從進(jìn)程域Comm的所有進(jìn)程(包括它自已)接收消息。這n個消息按照進(jìn)程的標(biāo)識rank排序進(jìn)行拼接,然后存放在Root進(jìn)程的接收緩沖中。接收緩沖由三元組<RecvAddress,RecvCount,RecvDatatype>標(biāo)識,發(fā)送緩沖由三元組<SendAddress,SendCount,SendDatatype>標(biāo)識,所有非Root進(jìn)程忽略接收緩沖。48第四十八頁,共六十五頁,編輯于2023年,星期三群集通信散播也是一個一對多操作,其調(diào)用格式如下:MPI_Scatter(SendAddress,SendCount,SendDatatype,RecvAddress,RecvCount,RecvDatatype,Root,Comm)49第四十九頁,共六十五頁,編輯于2023年,星期三群集通信散播的特點Scatter執(zhí)行與Gather相反的操作。Root進(jìn)程給所有進(jìn)程(包括它自已)發(fā)送一個不同的消息,這n(n為進(jìn)程域comm包括的進(jìn)程個數(shù))個消息在Root進(jìn)程的發(fā)送緩沖區(qū)中按進(jìn)程標(biāo)識的順序有序地存放。每個接收緩沖由三元組<RecvAddress,RecvCount,RecvDatatype>標(biāo)識,所有的非Root進(jìn)程忽略發(fā)送緩沖。對Root進(jìn)程,發(fā)送緩沖由三元組<SendAddress,SendCount,SendDatatype>標(biāo)識。50第五十頁,共六十五頁,編輯于2023年,星期三群集通信全局收集多對多通信的典型例子,其調(diào)用格式如下:MPI_Allgather(SendAddress,SendCount,SendDatatype,RecvAddress,RecvCount,RecvDatatype,Comm)Allgather操作相當(dāng)于每個進(jìn)程都作為ROOT進(jìn)程執(zhí)行了一次Gather調(diào)用,即每一個進(jìn)程都按照Gather的方式收集來自所有進(jìn)程(包括自己)的數(shù)據(jù)。51第五十一頁,共六十五頁,編輯于2023年,星期三群集通信全局交換也是一個多對多操作,其調(diào)用格式如下:MPI_Alltoall(SendAddress,SendCount,SendDatatype,RecvAddress,RecvCount,RecvDatatype,Comm)52第五十二頁,共六十五頁,編輯于2023年,星期三群集通信全局交換的特點在全局交換中,每個進(jìn)程發(fā)送一個消息給所有進(jìn)程(包括它自已)。這n(n為進(jìn)程域comm包括的進(jìn)程個數(shù))個消息在它的發(fā)送緩沖中以進(jìn)程標(biāo)識的順序有序地存放。從另一個角度來看這個通信,每個進(jìn)程都從所有進(jìn)程接收一個消息,這n個消息以標(biāo)號的順序被連接起來,存放在接收緩沖中。全局交換等價于每個進(jìn)程作為Root進(jìn)程執(zhí)行了一次散播操作。53第五十三頁,共六十五頁,編輯于2023年,星期三群集通信同步功能用來協(xié)調(diào)各個進(jìn)程之間的進(jìn)度和步伐。目前MPI的實現(xiàn)中支持一個同步操作,即路障同步(Barrier)。路障同步的調(diào)用格式如下:MPI_Barrier(Comm)在路障同步操作MPI_Barrier(Comm)中,通信域Comm中的所有進(jìn)程相互同步。在該操作調(diào)用返回后,可以保證組內(nèi)所有的進(jìn)程都已經(jīng)執(zhí)行完了調(diào)用之前的所有操作,可以開始該調(diào)用后的操作。54第五十四頁,共六十五頁,編輯于2023年,星期三群集通信群集通信的聚合功能使得MPI進(jìn)行通信的同時完成一定的計算。MPI聚合的功能分三步實現(xiàn)首先是通信的功能,即消息根據(jù)要求發(fā)送到目標(biāo)進(jìn)程,目標(biāo)進(jìn)程也已經(jīng)收到了各自需要的消息;然后是對消息的處理,即執(zhí)行計算功能;最后把處理結(jié)果放入指定的接收緩沖區(qū)。MPI提供了兩種類型的聚合操作:歸約和掃描。55第五十五頁,共六十五頁,編輯于2023年,星期三群集通信歸約的調(diào)用格式如下:MPI_Reduce(SendAddress,RecvAddress,Count,Datatype,Op,Root,Comm)歸約的特點歸約操作對每個進(jìn)程的發(fā)送緩沖區(qū)(SendAddress)中的數(shù)據(jù)按給定的操作進(jìn)行運算,并將最終結(jié)果存放在Root進(jìn)程的接收緩沖區(qū)(RecvAddress)中。參與計算操作的數(shù)據(jù)項的數(shù)據(jù)類型在Datatype域中定義,歸約操作由Op域定義。歸約操作可以是MPI預(yù)定義的,也可以是用戶自定義的。歸約操作允許每個進(jìn)程貢獻(xiàn)向量值,而不只是標(biāo)量值,向量的長度由Count定義。56第五十六頁,共六十五頁,編輯于2023年,星期三群集通信MPI預(yù)定義的歸約操作操作含義操作含義MPI_MAX最大值MPI_LOR邏輯或MPI_MIN最小值MPI_BOR按位或MPI_SUM求和MPI_LXOR邏輯異或MPI_PROD求積MPI_BXOR按位異或MPI_LAND邏輯與MPI_MAXLOC第一個最大值MPI_BAND按位與MPI_MINLOC第一個最小值57第五十七頁,共六十五頁,編輯于2023年,星期三群集通信掃描的調(diào)用格式如下:MPI_scan(SendAddress,RecvAddress,Count,Datatype,Op,Comm)掃描的特點可以把掃描操作看作是一種特殊的歸約,即每一個進(jìn)程都對排在它前面的進(jìn)程進(jìn)行歸約操作。MPI_SCAN調(diào)用的結(jié)果是,對于每一個進(jìn)程i,它對進(jìn)程0,1,…,i的發(fā)送緩沖區(qū)的數(shù)據(jù)進(jìn)行了指定的歸約操
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年甘肅建筑安全員B證考試題庫及答案
- 2025江西省安全員考試題庫附答案
- 上腔靜脈壓迫綜合征的處理
- 《汽車出口調(diào)查》課件
- 單位人力資源管理制度集錦合集十篇
- 課題申報書:偵查中的數(shù)據(jù)畫像研究
- 2024年培訓(xùn)學(xué)校工作總結(jié)(34篇)
- 2025關(guān)于合同解除的條件工程
- 2025關(guān)于出租車駕駛員勞動合同范本
- 平滑劑560行業(yè)行業(yè)發(fā)展趨勢及投資戰(zhàn)略研究分析報告
- 剝皮芝煤礦消防安全自檢方案及自查報告
- GB/T 22740-2008地理標(biāo)志產(chǎn)品靈寶蘋果
- 《人力資源情緒管理問題研究開題報告(含提綱)》
- 哮喘吸入裝置的正確使用方法課件
- 2023年成都東部集團(tuán)有限公司招聘筆試題庫及答案解析
- 角點網(wǎng)格一.角點網(wǎng)格定義
- 自動控制原理全套課件
- 視頻監(jiān)控室值班記錄表
- 歌曲《梁?!泛喿V完整版
- 小學(xué)語文教研組期末考試質(zhì)量分析
- 校園安全存在問題及對策
評論
0/150
提交評論