




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
消息傳遞并行程序設(shè)計1第1頁,課件共65頁,創(chuàng)作于2023年2月第八章消息傳遞并行程序設(shè)計8.1引言8.26個基本函數(shù)組成的MPI子集8.3MPI消息8.4點對點通信8.5群集通信2第2頁,課件共65頁,創(chuàng)作于2023年2月8.1引言MPI(MessagePassingInterface)是一個消息傳遞接口標準,具有多種不同的免費、高效、實用的實現(xiàn)版本MPI提供一個可移植、高效、靈活的消息傳遞接口庫MPI以語言獨立的形式存在,可運行在不同的操作系統(tǒng)和硬件平臺上幾乎所有的并行計算機廠商都提供對它的支持,成為了事實上的并行編程標準MPI提供與C和Fortran語言的綁定3第3頁,課件共65頁,創(chuàng)作于2023年2月引言MPI標準產(chǎn)生于1992年4月MPI是一個庫,而不是一門語言,因此對MPI的使用必須和特定的語言結(jié)合起來進行MPI的版本MPICH:最重要的一種MPI實現(xiàn),免費獲取網(wǎng)址:/mpi/mpichLAM(LocalAreaMulticomputer):由美國OhioStateUniversity開發(fā),/downloadCHIMP:由Edinburgh大學開發(fā)的另外一個免費MPI實現(xiàn),是在EdinburghParallelComputingCenter的支持下進行的,ftp://ftp.epcc.ed.ac.uk/pub/packages/chimp/release4第4頁,課件共65頁,創(chuàng)作于2023年2月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);/*該進程編號*/MPI_Comm_size(MPI_COMM_WORLD,&size);/*總的進程數(shù)目*/5第5頁,課件共65頁,創(chuàng)作于2023年2月6個基本函數(shù)組成的MPI子集if(rank==0){senddata=9999;MPI_Send(&senddata,1,MPI_INT,1,tag,MPI_COMM_WORLD);/*發(fā)送數(shù)據(jù)到進程1*/}if(rank==1)MPI_Recv(&recvdata,1,MPI_INT,0,tag,MPI_COMM_WORLD,&status);/*從進程0接收數(shù)據(jù)*/MPI_Finalize();/*MPI的結(jié)束函數(shù)*/return(0);}6第6頁,課件共65頁,創(chuàng)作于2023年2月6個基本函數(shù)組成的MPI子集1、MPI初始化:通過MPI_Init函數(shù)進入MPI環(huán)境并完成所有的初始化工作。intMPI_Init(int*argc,char***argv)2、MPI結(jié)束:通過MPI_Finalize函數(shù)從MPI環(huán)境中退出。intMPI_Finalize(void)7第7頁,課件共65頁,創(chuàng)作于2023年2月6個基本函數(shù)組成的MPI子集3、獲取進程的編號:調(diào)用MPI_Comm_rank函數(shù)獲得當前進程在指定通信域中的編號,將自身與其他程序區(qū)分。intMPI_Comm_rank(MPI_Commcomm,int*rank)4、獲取指定通信域的進程數(shù):調(diào)用MPI_Comm_size函數(shù)獲取指定通信域的進程個數(shù),確定自身完成任務(wù)比例。intMPI_Comm_size(MPI_Commcomm,int*size)8第8頁,課件共65頁,創(chuàng)作于2023年2月6個基本函數(shù)組成的MPI子集5、消息發(fā)送:MPI_Send函數(shù)用于發(fā)送一個消息到目標進程。intMPI_Send(void*buf,intcount,MPI_Datatypedatatype,intdest,inttag,MPI_Commcomm)該函數(shù)將起始地址為buf的count個datatype類型的數(shù)據(jù)發(fā)送給目標進程,目標進程在通信域comm中的編號由dest標識。同時,發(fā)送方在發(fā)送該消息時給它打上一個標簽tag,用于把本次發(fā)送的消息和本進程發(fā)送給同一目標進程的其他消息區(qū)分出來9第9頁,課件共65頁,創(chuàng)作于2023年2月6、消息接受:MPI_Recv函數(shù)用于從指定進程接收一個消息intMPI_Recv(void*buf,intcount,MPI_Datatypedatatyepe,intsource,inttag,MPI_Commcomm,MPI_Status*status);該函數(shù)從源進程接受一個消息,并且該消息的標簽應(yīng)該應(yīng)該和參數(shù)tag一致,源進程在通信域comm中的編號由source表示。消息接收后存放在起始地址為buf的接受緩沖區(qū)中,該緩沖區(qū)由count個datatype類型的連續(xù)數(shù)據(jù)元素組成;6個基本函數(shù)組成的MPI子集10第10頁,課件共65頁,創(chuàng)作于2023年2月8.3MPI消息一個消息好比一封信消息的內(nèi)容即信的內(nèi)容,在MPI中稱為消息緩沖(MessageBuffer)消息的接收者即信的地址,在MPI中稱為消息信封(MessageEnvelop)11第11頁,課件共65頁,創(chuàng)作于2023年2月MPI消息MPI中,消息緩沖由三元組<起始地址,數(shù)據(jù)個數(shù),數(shù)據(jù)類型>標識消息信封由三元組<源/目標進程,消息標簽,通信域>標識三元組的方式使得MPI可以表達更為豐富的信息,功能更強大12第12頁,課件共65頁,創(chuàng)作于2023年2月MPI消息(數(shù)據(jù)類型)MPI的消息類型分為兩種:預(yù)定義類型和派生數(shù)據(jù)類型(DerivedDataType)預(yù)定義數(shù)據(jù)類型:MPI支持異構(gòu)計算(HeterogeneousComputing),它指在不同計算機系統(tǒng)上運行程序,每臺計算機可能有不同生產(chǎn)廠商,使用不同的處理器和操作系統(tǒng),當這些計算機使用不同的數(shù)據(jù)表示時,如何保證通信雙方的互操作性。MPI通過提供預(yù)定義數(shù)據(jù)類型來解決異構(gòu)計算中的互操作性問題,建立它與具體語言的對應(yīng)關(guān)系。派生數(shù)據(jù)類型:MPI引入派生數(shù)據(jù)類型來定義由數(shù)據(jù)類型不同且地址空間不連續(xù)的數(shù)據(jù)項組成的消息。13第13頁,課件共65頁,創(chuàng)作于2023年2月MPI預(yù)定義的數(shù)據(jù)類型14第14頁,課件共65頁,創(chuàng)作于2023年2月MPI附加數(shù)據(jù)類型MPI提供了兩個附加類型:MPI_BYTE和MPI_PACKED
。MPI_BYTE表示一個字節(jié),所有的計算系統(tǒng)中一個字節(jié)都代表8個二進制位。MPI_PACKED預(yù)定義數(shù)據(jù)類型被用來實現(xiàn)傳輸?shù)刂房臻g不連續(xù)的數(shù)據(jù)項。15第15頁,課件共65頁,創(chuàng)作于2023年2月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第16頁,課件共65頁,創(chuàng)作于2023年2月MPI消息(派生數(shù)據(jù)類型)派生數(shù)據(jù)類型可以用類型圖來描述,這是一種通用的類型描述方法,它是一系列二元組<基類型,偏移>的集合,可以表示成如下格式:{<基類型0,偏移0>,···,<基類型n-1,偏移n-1>}在派生數(shù)據(jù)類型中,基類型可以是任何MPI預(yù)定義數(shù)據(jù)類型,也可以是其它的派生數(shù)據(jù)類型,即支持數(shù)據(jù)類型的嵌套定義。如圖,陰影部分是基類型所占用的空間,其它空間可以是特意留下的,也可以是為了方便數(shù)據(jù)對齊。17第17頁,課件共65頁,創(chuàng)作于2023年2月MPI消息(數(shù)據(jù)類型)MPI提供了全面而強大的構(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第18頁,課件共65頁,創(chuàng)作于2023年2月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)的確認后才能調(diào)用MPI_Send進行消息發(fā)送19第19頁,課件共65頁,創(chuàng)作于2023年2月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第20頁,課件共65頁,創(chuàng)作于2023年2月MPI消息(消息標簽)為什么需要消息標簽?當發(fā)送者連續(xù)發(fā)送兩個相同類型消息給同一個接收者,如果沒有消息標簽,接收者將無法區(qū)分這兩個消息這段代碼打算傳送A的前32個字節(jié)進入X,傳送B的前16個字節(jié)進入Y。但是,盡管消息B后發(fā)送,但可能先到達進程Q,就會被第一個接收函數(shù)接收在X中。使用標簽可以避免這個錯誤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第21頁,課件共65頁,創(chuàng)作于2023年2月MPI消息(消息標簽)添加標簽使得服務(wù)進程可以對兩個不同的用戶進程分別處理,提高靈活性例4、一個簡單的處理客戶請求的情形22第22頁,課件共65頁,創(chuàng)作于2023年2月MPI消息(通信域)通信域(Communicator)包括進程組(ProcessGroup)和通信上下文(CommunicationContext)等內(nèi)容,用于描述通信進程間的通信關(guān)系。通信域分為組內(nèi)通信域和組間通信域,分別用來實現(xiàn)MPI的組內(nèi)通信(Intra-communication)和組間通信(Inter-communication)。23第23頁,課件共65頁,創(chuàng)作于2023年2月MPI消息(通信域)進程組是進程的有限、有序集。有限意味著,在一個進程組中,進程的個數(shù)n是有限的,這里的n稱為進程組大小(GroupSize)。有序意味著,進程的編號是按0,1,…,n-1排列的一個進程用它在一個通信域(組)中的編號進行標識。組的大小和進程編號可以通過調(diào)用以下的MPI函數(shù)獲得:MPI_Comm_size(communicator,&group_size)MPI_Comm_rank(communicator,&my_rank)
24第24頁,課件共65頁,創(chuàng)作于2023年2月MPI消息(通信域)通信上下文:安全的區(qū)別不同的通信以免相互干擾通信上下文不是顯式的對象,只是作為通信域的一部分出現(xiàn)進程組和通信上下文結(jié)合形成了通信域MPI_COMM_WORLD是所有進程的集合,在執(zhí)行了MPI_Init函數(shù)之后自動產(chǎn)生,MPI_COMM_WORLD只包含使用它的進程25第25頁,課件共65頁,創(chuàng)作于2023年2月MPI消息(通信域)MPI提供豐富的函數(shù)用于管理通信域函數(shù)名含義MPI_Comm_size獲取指定通信域中進程的個數(shù)MPI_Comm_rank獲取當前進程在指定通信域中的編號MPI_Comm_compare對給定的兩個通信域進行比較MPI_Comm_dup復(fù)制一個已有的通信域生成一個新的通信域,兩者除通信上下文不同外,其它都一樣。MPI_Comm_create根據(jù)給定的進程組創(chuàng)建一個新的通信域MPI_Comm_split從一個指定通信域分裂出多個子通信域,每個子通信域中的進程都是原通信域中的進程。MPI_Comm_free釋放一個通信域26第26頁,課件共65頁,創(chuàng)作于2023年2月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第27頁,課件共65頁,創(chuàng)作于2023年2月MPI消息(通信域)MPI_Comm_dup(MPI_COMM_WORLD,&MyWorld)創(chuàng)建了一個新的通信域MyWorld,它包含了與原通信域MPI_COMM_WORLD相同的進程組,但具有不同的通信上下文。MPI_Comm_split(MyWorld,Color,Key,&SplitWorld)函數(shù)調(diào)用則在通信域MyWorld的基礎(chǔ)上產(chǎn)生了幾個分割的子通信域。原通信域MyWorld中的進程按照不同的Color值處在不同的分割通信域中,每個進程在不同分割通信域中的進程編號則由Key值來標識。
RankinMyWorld0123456789Color0120120120Key0001112223RankinSplitWorld(Color=0)0123RankinSplitWorld(Color=1)012RankinSplitWorld(Color=2)01228第28頁,課件共65頁,創(chuàng)作于2023年2月MPI消息(通信域)組間通信域是一種特殊的通信域,該通信域包括了兩個進程組,分屬于兩個進程組的進程之間通過組間通信域?qū)崿F(xiàn)通信。一般把調(diào)用進程所在的進程組稱為本地進程組,而把另外一個稱為遠程進程組。函數(shù)名含義MPI_Comm_test_inter判斷給定的通信域是否為組間通信域MPI_Comm_remote_size獲取指定組間通信域中遠程進程組的大小MPI_Comm_remote_group返回給定組間通信域的遠程進程組MPI_Intercomm_creat根據(jù)給定的兩個組內(nèi)通信域生成一個組間通信域。MPI_Intercomm_merge將給定組間通信域包含的兩個進程組合并,形成一個新的組內(nèi)通信域29第29頁,課件共65頁,創(chuàng)作于2023年2月MPI消息(消息狀態(tài))消息狀態(tài)(MPI_Status類型)存放接收消息的狀態(tài)信息,包括消息的源進程標識(MPI_SOURCE)、消息標簽(MPI_TAG)、包含的數(shù)據(jù)項個數(shù)(count)以及消息的錯誤接受數(shù)目(MPI_ERROR)它是消息接收函數(shù)MPI_Recv的最后一個參數(shù)當一個接收者從不同進程接收不同大小和不同標簽的消息時,消息的狀態(tài)信息非常有用。30第30頁,課件共65頁,創(chuàng)作于2023年2月MPI消息(消息狀態(tài))假設(shè)多個客戶進程發(fā)送消息給服務(wù)進程請求服務(wù),通過消息標簽來標識客戶進程,從而服務(wù)進程采取不同的服務(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第31頁,課件共65頁,創(chuàng)作于2023年2月8.4點對點通信MPI的點對點通信(‘Point-to-PointCommunication)同時提供了阻塞和非阻塞兩種通信機制。同時也支持多種通信模式。不同通信模式和不同通信機制的結(jié)合,便產(chǎn)生了非常豐富的點對點通信函數(shù)。32第32頁,課件共65頁,創(chuàng)作于2023年2月點對點通信(通信模式)阻塞和非阻塞通信的主要區(qū)別在于返回后的資源可用性阻塞通信返回的條件:通信操作已經(jīng)完成,及消息已經(jīng)發(fā)送或接收調(diào)用的緩沖區(qū)可用。若是發(fā)送操作,則該緩沖區(qū)可以被其它的操作更新;若是接收操作,該緩沖區(qū)的數(shù)據(jù)已經(jīng)完整,可以被正確引用。33第33頁,課件共65頁,創(chuàng)作于2023年2月點對點通信(通信模式)通信模式(CommunicationMode)指的是緩沖管理,以及發(fā)送方和接收方之間的同步方式。共有下面四種通信模式同步(synchronous)通信模式緩沖(buffered)通信模式標準(standard)通信模式就緒(ready)通信模式34第34頁,課件共65頁,創(chuàng)作于2023年2月點對點通信(通信模式)同步通信模式:只有相應(yīng)的接收過程已經(jīng)啟動,發(fā)送過程才正確返回。因此,同步發(fā)送返回后,表示發(fā)送緩沖區(qū)中的數(shù)據(jù)已經(jīng)全部被系統(tǒng)緩沖區(qū)緩存,并且已經(jīng)開始發(fā)送。當同步發(fā)送返回后,發(fā)送緩沖區(qū)可以被釋放或者重新使用。SRSynchronous12335第35頁,課件共65頁,創(chuàng)作于2023年2月點對點通信(通信模式)緩沖通信模式:緩沖通信模式的發(fā)送不管接收操作是否已經(jīng)啟動都可以執(zhí)行。但是需要用戶程序事先申請一塊足夠大的緩沖區(qū),通過MPI_Buffer_attch實現(xiàn),通過MPI_Buffer_detach來回收申請的緩沖區(qū)。SRBuffer1236第36頁,課件共65頁,創(chuàng)作于2023年2月點對點通信(通信模式)標準通信模式:是否對發(fā)送的數(shù)據(jù)進行緩沖由MPI的實現(xiàn)來決定,而不是由用戶程序來控制。發(fā)送可以是同步的或緩沖的,取決于實現(xiàn)StandardSR137第37頁,課件共65頁,創(chuàng)作于2023年2月點對點通信(通信模式)就緒通信模式:發(fā)送操作只有在接收進程相應(yīng)的接收操作已經(jīng)開始才進行發(fā)送。當發(fā)送操作啟動而相應(yīng)的接收還沒有啟動,發(fā)送操作將出錯。就緒通信模式的特殊之處就是接收操作必須先于發(fā)送操作啟動。SRReady1238第38頁,課件共65頁,創(chuàng)作于2023年2月點對點通信(通信模式)MPI的發(fā)送操作支持四種通信模式,它們與阻塞屬性一起產(chǎn)生了MPI中的8種發(fā)送操作。而MPI的接收操作只有兩種:阻塞接收和非阻塞接收。非阻塞通信返回后并不意味著通信操作的完成,MPI還提供了對非阻塞通信完成的檢測,主要的有兩種:MPI_Wait函數(shù)和MPI_Test函數(shù)。39第39頁,課件共65頁,創(chuàng)作于2023年2月點對點通信(通信模式)MPI的點對點通信操作MPI原語阻塞非阻塞StandardSendMPI_SendMPI_IsendSynchronousSendMPI_SsendMPI_IssendBufferedSendMPI_BsendMPI_IbsendReadySendMPI_RsendMPI_IrsendReceiveMPI_RecvMPI_IrecvCompletionCheckMPI_WaitMPI_Test40第40頁,課件共65頁,創(chuàng)作于2023年2月點對點通信(通信模式)在阻塞通信的情況下,通信還沒有結(jié)束的時候,處理器只能等待,浪費了計算資源。一種常見的技術(shù)就是設(shè)法使計算與通信重疊,非阻塞通信可以用來實現(xiàn)這一目的。一條三進程的流水線,一個進程連續(xù)地從左邊的進程接收一個輸入數(shù)據(jù)流,計算一個新的值,然后將它發(fā)送給右邊的進程。while(Not_Done){MPI_Irevc(NextX,…);MPI_Isend(PreviousY,…);CurrentY=Q(CurrentX);}41第41頁,課件共65頁,創(chuàng)作于2023年2月8.5群集通信群集通信(CollectiveCommunications)是一個進程組中的所有進程都參加的全局通信操作。群集通信一般實現(xiàn)三個功能:通信、聚集和同步。通信功能主要完成組內(nèi)數(shù)據(jù)的傳輸聚集功能在通信的基礎(chǔ)上對給定的數(shù)據(jù)完成一定的操作同步功能實現(xiàn)組內(nèi)所有進程在執(zhí)行進度上取得一致42第42頁,課件共65頁,創(chuàng)作于2023年2月群集通信群集通信,按照通信方向的不同,又可以分為三種:一對多通信,多對一通信和多對多通信。一對多通信:一個進程向其它所有的進程發(fā)送消息,這個負責發(fā)送消息的進程叫做Root進程。多對一通信:一個進程負責從其它所有的進程接收消息,這個接收的進程也叫做Root進程。多對多通信:每一個進程都向其它所有的進程發(fā)送或者接收消息。43第43頁,課件共65頁,創(chuàng)作于2023年2月群集通信類型函數(shù)名含義通信MPI_Bcast一對多廣播同樣的消息MPI_Gather多對一收集各個進程的消息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第44頁,課件共65頁,創(chuàng)作于2023年2月群集通信廣播是一對多通信的典型例子,其調(diào)用格式如下:MPI_Bcast(Address,Count,Datatype,Root,Comm)45第45頁,課件共65頁,創(chuàng)作于2023年2月群集通信廣播的特點
標號為Root的進程發(fā)送相同的消息給通信域Comm中的所有進程。消息的內(nèi)容如同點對點通信一樣由三元組<Address,Count,Datatype>標識。對Root進程來說,這個三元組既定義了發(fā)送緩沖也定義了接收緩沖。對其它進程來說,這個三元組只定義了接收緩沖46第46頁,課件共65頁,創(chuàng)作于2023年2月群集通信收集是多對一通信的典型例子,其調(diào)用格式下:MPI_Gather(SendAddress,SendCount,SendDatatype,RecvAddress,RecvCount,RecvDatatype,Root,Comm)47第47頁,課件共65頁,創(chuàng)作于2023年2月群集通信收集的特點在收集操作中,Root進程從進程域Comm的所有進程(包括它自已)接收消息。這n個消息按照進程的標識rank排序進行拼接,然后存放在Root進程的接收緩沖中。接收緩沖由三元組<RecvAddress,RecvCount,RecvDatatype>標識,發(fā)送緩沖由三元組<SendAddress,SendCount,SendDatatype>標識,所有非Root進程忽略接收緩沖。48第48頁,課件共65頁,創(chuàng)作于2023年2月群集通信散播也是一個一對多操作,其調(diào)用格式如下:MPI_Scatter(SendAddress,SendCount,SendDatatype,RecvAddress,RecvCount,RecvDatatype,Root,Comm)49第49頁,課件共65頁,創(chuàng)作于2023年2月群集通信散播的特點Scatter執(zhí)行與Gather相反的操作。Root進程給所有進程(包括它自已)發(fā)送一個不同的消息,這n(n為進程域comm包括的進程個數(shù))個消息在Root進程的發(fā)送緩沖區(qū)中按進程標識的順序有序地存放。每個接收緩沖由三元組<RecvAddress,RecvCount,RecvDatatype>標識,所有的非Root進程忽略發(fā)送緩沖。對Root進程,發(fā)送緩沖由三元組<SendAddress,SendCount,SendDatatype>標識。50第50頁,課件共65頁,創(chuàng)作于2023年2月群集通信全局收集多對多通信的典型例子,其調(diào)用格式如下:MPI_Allgather(SendAddress,SendCount,SendDatatype,RecvAddress,RecvCount,RecvDatatype,Comm)Allgather操作相當于每個進程都作為ROOT進程執(zhí)行了一次Gather調(diào)用,即每一個進程都按照Gather的方式收集來自所有進程(包括自己)的數(shù)據(jù)。51第51頁,課件共65頁,創(chuàng)作于2023年2月群集通信全局交換也是一個多對多操作,其調(diào)用格式如下:MPI_Alltoall(SendAddress,SendCount,SendDatatype,RecvAddress,RecvCount,RecvDatatype,Comm)52第52頁,課件共65頁,創(chuàng)作于2023年2月群集通信全局交換的特點在全局交換中,每個進程發(fā)送一個消息給所有進程(包括它自已)。這n(n為進程域comm包括的進程個數(shù))個消息在它的發(fā)送緩沖中以進程標識的順序有序地存放。從另一個角度來看這個通信,每個進程都從所有進程接收一個消息,這n個消息以標號的順序被連接起來,存放在接收緩沖中。全局交換等價于每個進程作為Root進程執(zhí)行了一次散播操作。53第53頁,課件共65頁,創(chuàng)作于2023年2月群集通信同步功能用來協(xié)調(diào)各個進程之間的進度和步伐。目前MPI的實現(xiàn)中支持一個同步操作,即路障同步(Barrier)。路障同步的調(diào)用格式如下:MPI_Barrier(Comm)在路障同步操作MPI_Barrier(Comm)中,通信域Comm中的所有進程相互同步。在該操作調(diào)用返回后,可以保證組內(nèi)所有的進程都已經(jīng)執(zhí)行完了調(diào)用之前的所有操作,可以開始該調(diào)用后的操作。54第54頁,課件共65頁,創(chuàng)作于2023年2月群集通信群集通信的聚合功能使得MPI進行通信的同時完成一定的計算。MPI聚合的功能分三步實現(xiàn)首先是通信的功能,即消息根據(jù)要求發(fā)送到目標進程,目標進程也已經(jīng)收到了各自需要的消息;然后是對消息的處理,即執(zhí)行計算功能;最后把處理結(jié)果放入指定的接收緩沖區(qū)。MPI提供了兩種類型的聚合操作:歸約和掃描。55第55頁,課件共65頁,創(chuàng)作于2023年2月群集通信歸約的調(diào)用格式如下:MPI_Reduce(SendAddress,RecvAddress,Count,Datatype,Op,Root,Comm)歸約的特點歸約操作對每個進程的發(fā)送緩沖區(qū)(SendAddress)中的數(shù)據(jù)按給定的操作進行運算,并將最終結(jié)果存放在Root進程的接收緩沖區(qū)(RecvAddress)中。參與計算操作的數(shù)據(jù)項的數(shù)據(jù)類型在Datatype域中定義,歸約操作由Op域定義。歸約操作可以是MPI預(yù)定義的,也可以是用戶自定義的。歸約操作允許每個進程貢獻向量值,而不只是標量值,向量的長度由Count定義。56第56頁,課件共65頁,創(chuàng)作于2023年2月群集通信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第57頁,課件共65頁,創(chuàng)作于2023年2月群集通信掃描的調(diào)用格式如下:MPI_scan(SendAddress,RecvAddress,Count,Datatype,Op,Comm)掃描的特點可以把掃描操作看作是一種特殊的歸約,即每一個進程都對排在它前面的進程進行歸約操作。MPI_SCAN調(diào)用的結(jié)果是,對于每一個進程i,它對進程0,1,…,i的發(fā)送緩沖區(qū)的數(shù)據(jù)進行了指
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年壓瘡護理新進展
- 客戶開發(fā)工作總結(jié)案例
- 電梯安全培訓
- 兒童財商教育課件
- 內(nèi)科護理10分鐘小講課
- 倉儲物流中心廠房出租與倉儲服務(wù)外包協(xié)議
- 心梗老人的護理
- 知識產(chǎn)權(quán)采購合同范本:電子元器件行業(yè)
- 創(chuàng)新型企業(yè)廠房物業(yè)管理及創(chuàng)新解決方案合同范本
- 物業(yè)服務(wù)企業(yè)人力資源配置合同
- 文史哲與藝術(shù)中的數(shù)學智慧樹知到期末考試答案章節(jié)答案2024年吉林師范大學
- 酒吧會員方案
- 汽輪機檢修安全施工方案
- 教科版六年級下冊科學第一單元《小小工程師》教材分析及全部教案(定稿;共7課時)
- 2024屆北京市海淀區(qū)101中學語文八年級第二學期期末檢測試題含解析
- 國家自然科學基金申請經(jīng)驗匯總課件
- 《新產(chǎn)程管理》課件
- 管理ABC-干嘉偉(美團網(wǎng)COO)
- 中試車間安全培訓
- 醫(yī)療衛(wèi)生機構(gòu)6S常態(tài)化管理打分表
- 紫羅蘭永恒花園
評論
0/150
提交評論