消息傳遞編程_第1頁
消息傳遞編程_第2頁
消息傳遞編程_第3頁
消息傳遞編程_第4頁
消息傳遞編程_第5頁
已閱讀5頁,還剩45頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第第章章消消息息傳傳遞遞編編程程 消息傳遞模型的特征消息傳遞模型的特征 多線程化多線程化 由多個進程組成,每個進程有自己的控制線程,可執行不同代碼,由多個進程組成,每個進程有自己的控制線程,可執行不同代碼,支持控制并行(支持控制并行(MPMD)和數據并行()和數據并行(SPMD)。)。 異步并行性異步并行性 各進程異步執行,使用專用操作如路障、鎖定通信等專用操作對各進程異步執行,使用專用操作如路障、鎖定通信等專用操作對進程加以同步。進程加以同步。 分離的地址空間分離的地址空間 各進程留駐在不同的地址空間,一個進程中的數據對另一個進程各進程留駐在不同的地址空間,一個進程中的數據對另一個進程是不可

2、見的,進程間通過執行專用的消息傳遞操作實現交互。是不可見的,進程間通過執行專用的消息傳遞操作實現交互。 顯式交互顯式交互 程序員負責解決所有的交互問題,包括數據映射、通信、同步和程序員負責解決所有的交互問題,包括數據映射、通信、同步和聚集。聚集。 顯式分配顯式分配 工作負載和數據均需用戶用顯式方法分配給進程。工作負載和數據均需用戶用顯式方法分配給進程。第第章章消消息息傳傳遞遞編編程程 編程工具的選擇編程工具的選擇 專用并行編程語言專用并行編程語言 如如occam語言語言 對現有語言擴展語法來處理消息傳遞對現有語言擴展語法來處理消息傳遞 如如CC+語言、語言、Fortran M語言語言 專門的并

3、行編譯器專門的并行編譯器 不適用于消息傳遞機制不適用于消息傳遞機制 使用現有語言,配備消息傳遞外部過程庫使用現有語言,配備消息傳遞外部過程庫 如如PVM、MPI。必須提供至少兩類基本方法:。必須提供至少兩類基本方法:1、創建分離進程以使它們能在不同的計算機上運行的方、創建分離進程以使它們能在不同的計算機上運行的方法;法;2、發送和接收消息的方法。、發送和接收消息的方法。第第章章消消息息傳傳遞遞編編程程 進程的創建進程的創建 靜態創建靜態創建所有進程在執行前必須加以指定,系統將執行固所有進程在執行前必須加以指定,系統將執行固定數目的進程。程序員通常需在進程或程序執行定數目的進程。程序員通常需在進

4、程或程序執行之前用命令行顯式標識它們。通常有一個主進程之前用命令行顯式標識它們。通常有一個主進程(控制進程),其余的為從進程(工作進程)。(控制進程),其余的為從進程(工作進程)。SPMD模型將所有的進程融合到一個程序中,由模型將所有的進程融合到一個程序中,由控制語句選擇不同的執行部分。控制語句選擇不同的執行部分。SPMD是是MPI所所采用的主要方法采用的主要方法第第章章消消息息傳傳遞遞編編程程 進程的創建進程的創建 動態創建動態創建可在其他進程的執行期間創建進程并啟動執行它可在其他進程的執行期間創建進程并啟動執行它們,也可以撤銷它們。在執行過程中進程數可以們,也可以撤銷它們。在執行過程中進程

5、數可以發生變化。發生變化。動態進程創建功能更為強大,但在創建進程時也動態進程創建功能更為強大,但在創建進程時也會導致顯著的開銷。會導致顯著的開銷。動態進程創建最通用的模型是動態進程創建最通用的模型是MPMD模型。通常模型。通常采用主從方法,由一個處理器執行主程序(主進采用主從方法,由一個處理器執行主程序(主進程),而其余進程在主進程中啟動。程),而其余進程在主進程中啟動。第第章章消消息息傳傳遞遞編編程程 消息傳遞方式消息傳遞方式 同步消息傳遞同步消息傳遞消息傳遞過程結束后調用才返回的傳遞方式。消息傳遞過程結束后調用才返回的傳遞方式。同步消息傳遞不需要消息緩沖存儲器。同步消息傳遞不需要消息緩沖存

6、儲器。同步發送和接收操作過程中通常需要某種形式的同步發送和接收操作過程中通常需要某種形式的同步信號。同步信號。P同步發送同步發送M到到Q,等待,等待Q同步從同步從P接收接收S,直到消息,直到消息M已被發送和接收,已被發送和接收,發送和接收調用才返回,這時發送和接收調用才返回,這時X被賦值為被賦值為11。進程進程PM = 10;send M to Q;M = 20;進程進程QS = -100;receive S from P;X = S+1;第第章章消消息息傳傳遞遞編編程程使用三路協議的同步使用三路協議的同步send和和recv調用調用send();recv();進程進程1進程進程2請求發送,喚

7、醒進程請求發送,喚醒進程2確認確認開始發送開始發送進程進程2掛起掛起recv在在send之前調用之前調用send();recv();進程進程1進程進程2請求發送,進程請求發送,進程1掛起掛起確認,喚醒進程確認,喚醒進程1開始消息發送過程開始消息發送過程send在在recv之前調用之前調用第第章章消消息息傳傳遞遞編編程程 消息傳遞方式消息傳遞方式 鎖定消息傳遞鎖定消息傳遞使用消息緩沖區并在本地操作完成后就返回例程使用消息緩沖區并在本地操作完成后就返回例程稱為鎖定的,或本地鎖定的。稱為鎖定的,或本地鎖定的。消息緩沖區用來保存在消息緩沖區用來保存在recv接收之前發送的消接收之前發送的消息。息。發送

8、例程當本地操作結束,消息已經安全上路,發送例程當本地操作結束,消息已經安全上路,就可以繼續執行后繼工作。就可以繼續執行后繼工作。接收例程需要消息時,從緩沖區中獲得消息。接收例程需要消息時,從緩沖區中獲得消息。若消息緩沖區是空的,接收例程進入等待狀態。若消息緩沖區是空的,接收例程進入等待狀態。當緩沖區已滿時,發送例程將進入等待狀態。當緩沖區已滿時,發送例程將進入等待狀態。第第章章消消息息傳傳遞遞編編程程進程進程PM = 10;send M to Q;M = 20;進程進程QS = -100;receive S from P;X = S+1;在鎖定發送在鎖定發送/接收方式下:接收方式下:當當P發送

9、發送M到到Q,消息離開,消息離開M時,調用即返回,此時消息可能還未時,調用即返回,此時消息可能還未到達到達Q,而是暫時緩沖在網絡中的某處,或者已經到達接收結點,而是暫時緩沖在網絡中的某處,或者已經到達接收結點的緩沖區。的緩沖區。當當Q準備從準備從P接收消息到接收消息到S中時,如果緩沖中已經有消息,不用等中時,如果緩沖中已經有消息,不用等待相應的發送操作,就可執行鎖定接收,然而在消息未被接收前,待相應的發送操作,就可執行鎖定接收,然而在消息未被接收前,它不能返回。它不能返回。X將被賦值為將被賦值為11。第第章章消消息息傳傳遞遞編編程程 消息傳遞方式消息傳遞方式 非鎖定消息傳遞非鎖定消息傳遞進程不

10、必等相應接收,立即返回的例程稱為非鎖進程不必等相應接收,立即返回的例程稱為非鎖定的。定的。進程執行非鎖定發送進程執行非鎖定發送/接收,非鎖定發送接收,非鎖定發送/接收接收在告知系統發送在告知系統發送/接收請求之后,便立即返回,接收請求之后,便立即返回,此時消息并不一定已發出此時消息并不一定已發出/接收。接收。非鎖定的消息傳遞需由程序員保證用于傳送的數非鎖定的消息傳遞需由程序員保證用于傳送的數據在傳送之前不能被后繼的語句所修改。據在傳送之前不能被后繼的語句所修改。第第章章消消息息傳傳遞遞編編程程進程進程PM = 10;send M to Q;執行某些不會改變執行某些不會改變Q的計算的計算wait

11、 for M to be sentM = 20;進程進程QS = -100;receive S from P;執行某些不會使用執行某些不會使用S的計算的計算wait for S to be receivedX = S+1;在非鎖定發送在非鎖定發送/接收方式下:接收方式下:依賴于兩個進程的速度,依賴于兩個進程的速度,X可能被賦為可能被賦為11、21、-99。進程進程PM = 10;send M to Q;M = 20;進程進程QS = -100;receive S from P;X = S+1;第第章章消消息息傳傳遞遞編編程程 消息傳遞方式消息傳遞方式 三種方式的比較三種方式的比較同步方式表述清

12、晰且易用,不需設置額外的數據同步方式表述清晰且易用,不需設置額外的數據緩沖區,但可能導致某些周期的浪費。緩沖區,但可能導致某些周期的浪費。在幾乎所有的現行消息傳遞系統中,都使用鎖定在幾乎所有的現行消息傳遞系統中,都使用鎖定和非鎖定方式,且需要足夠的臨時緩沖區空間。和非鎖定方式,且需要足夠的臨時緩沖區空間。非鎖定方式可使等待時間減到最小,但可能需要非鎖定方式可使等待時間減到最小,但可能需要利用等待操作進行協調。額外緩沖區和等待操作利用等待操作進行協調。額外緩沖區和等待操作的使用可能抵銷所帶來的好處。的使用可能抵銷所帶來的好處。第第章章消消息息傳傳遞遞編編程程 消息傳遞方式消息傳遞方式 群組消息傳

13、遞群組消息傳遞廣播廣播(broadcast) 向所有與求解問題有關的進程發送相同的信息。向所有與求解問題有關的進程發送相同的信息。散播散播(scatter) 根進程的數據數組中的每個元素分別發送給各個進程。根進程的數據數組中的每個元素分別發送給各個進程。匯集匯集(gather) 一個進程從一組進程中的每一個進程處收集一個數據。一個進程從一組進程中的每一個進程處收集一個數據。匯集是散播的逆操作。匯集是散播的逆操作。 有時匯集操作與一個計算操作組合在一起,對各個值有時匯集操作與一個計算操作組合在一起,對各個值進行匯總,稱為歸約進行匯總,稱為歸約(reduce)操作操作第第章章消消息息傳傳遞遞編編程

14、程 消息選擇消息選擇 源進程和目的進程標記源進程和目的進程標記在發送和接收例程中須指定目的進程和源進程。在發送和接收例程中須指定目的進程和源進程。可以使用特殊符號或數字作為通配源地址,即允可以使用特殊符號或數字作為通配源地址,即允許接收來自任何源進程的消息。許接收來自任何源進程的消息。XXXX 收收第第章章消消息息傳傳遞遞編編程程 消息選擇消息選擇 消息標記消息標記(Message Tag)由用戶選定的正整數,對不同類型的消息進行區由用戶選定的正整數,對不同類型的消息進行區分,附于消息之上,用于消息的選擇。分,附于消息之上,用于消息的選擇。進程進程P:send(A, double, Q)sen

15、d(B, int, Q)進程進程Q:recv(X, P, double)recv(Y, P, int)進程進程P:send(A, double, Q, tag1)send(B, int, Q, tag2)進程進程Q:recv(X, P, tag1, double)recv(Y, P, tag2, int)XXXX 收收第第章章消消息息傳傳遞遞編編程程 MPI簡介簡介 MPI是由是由MPI論壇開發的一個非專利且獨立于平臺論壇開發的一個非專利且獨立于平臺的消息傳遞函數庫的與語言無關的標準規范。的消息傳遞函數庫的與語言無關的標準規范。 MPI已在多種機型、系統和所有主要的并行計算機已在多種機型、系統

16、和所有主要的并行計算機上得到了實現。上得到了實現。 MPI基于四個正交概念(消息數據類型、通信子、基于四個正交概念(消息數據類型、通信子、通信操作和虛擬拓撲)提供了二百多個函數。通信操作和虛擬拓撲)提供了二百多個函數。第第章章消消息息傳傳遞遞編編程程 MPI的實現的實現 MPI不是獨立、自含式的軟件系統,在自然不是獨立、自含式的軟件系統,在自然并行編程環境之上,由它提供一個消息傳遞并行編程環境之上,由它提供一個消息傳遞通信層,由它來確定諸如進程管理和通信層,由它來確定諸如進程管理和I/O的的必要性。必要性。 最流行的非專利實現是最流行的非專利實現是MPICH,是由,是由Argonne國家實驗室

17、和密西西比州立大學聯國家實驗室和密西西比州立大學聯合開發。合開發。第第章章消消息息傳傳遞遞編編程程 MPI中的并行性問題中的并行性問題 MPI對進程的生成未作說明,留給實現去處理。對進程的生成未作說明,留給實現去處理。 MPI假設進程是靜態的,當并行進程裝入時,創建假設進程是靜態的,當并行進程裝入時,創建所有的進程,一直存在直至整個程序終止。所有的進程,一直存在直至整個程序終止。 缺省進程組由所有進程組成,用缺省進程組由所有進程組成,用MPI_COMM_WORLD加以標識。加以標識。 在程序執行中途,不允許創建和終止進程。在程序執行中途,不允許創建和終止進程。第第章章消消息息傳傳遞遞編編程程

18、MPI中最基本的六個例程中最基本的六個例程 MPI_Init MPI_Init(&argc, &argv); MPI_Comm_size MPI_Comm_size(communicator, &group_size); MPI_Comm_rank MPI_Comm_rank(communicator, &my_rank); MPI_Send MPI_Send(address,count,datatype,dest,tag,communicator); MPI_Recv MPI_Recv(address,count,datatype,dest,tag,communicator,&status)

19、; MPI_Finalize MPI_Finalize();第第章章消消息息傳傳遞遞編編程程 MPI消息消息 MPI進程是單線程進程,有分離的地址空間,進程是單線程進程,有分離的地址空間,進程不能直接訪問另一個進程地址空間中的進程不能直接訪問另一個進程地址空間中的變量,需通過消息傳遞實現進程間的通信。變量,需通過消息傳遞實現進程間的通信。 消息由內容和信封組成。消息由內容和信封組成。MPI_Send(address,count,datatype,dest,tag,communicator);消息內容消息內容消息信封消息信封第第章章消消息息傳傳遞遞編編程程 MPI消息消息 數據類型數據類型 預定

20、義的數據類型預定義的數據類型 以以C綁定的預定義數據類型綁定的預定義數據類型 MPI_BYTE, MPI_CHAR, MPI_DOUBLE, MPK_FLOAT, MPI_INT, MPI_LONG, MPI_LONG_DOUBLE, MPI_PACKED, MPI_SHORT, MPI_UNSIGNED_CHAR, MPI_UNSIGNED, MPI_UNSIGNED_LONG, MPI_UNSIGNED_SHORT 預定義數據類型的信息內容結構預定義數據類型的信息內容結構 (address, count, datatype)第第章章消消息息傳傳遞遞編編程程 MPI消息消息 數據打包數據打包

21、為了表述由非連續數據項或由混合數據類型的數為了表述由非連續數據項或由混合數據類型的數據項組成的信息,可使用數據打包例程,將數據據項組成的信息,可使用數據打包例程,將數據先打包到一個發送緩沖區中。先打包到一個發送緩沖區中。MPI_Pack_size MPI_Pack_size(n,datatype,communicators,&Buffersize);MPI_Pack MPI_Pack(srcaddress,n,datatype,destaddress,buffersize, &Position,commnicator);第第章章消消息息傳傳遞遞編編程程 MPI消息消息 數據打包數據打包doub

22、le A100;MPI_Pack_size(50, MPI_DOUBLE, comm, &BufferSize);TempBuffer = malloc(BufferSize);Position = 0;for (i=0; i100; i+=2)MPI_Pack(A+i,1,MPI_DOUBLE,TempBuffer,BufferSize,&Position,comm);MPI_Send(TempBuffer,Position,MPI_PACKED,destination,tag,comm);第第章章消消息息傳傳遞遞編編程程 MPI消息消息 派生數據類型派生數據類型為了表述由非連續數據項或由混

23、合數據類型的數為了表述由非連續數據項或由混合數據類型的數據項組成的信息,可使用派生數據類型,即消息據項組成的信息,可使用派生數據類型,即消息中的每一項都有一個地址和數據類型。中的每一項都有一個地址和數據類型。double A100;MPI_Data_type EvenElements;MPI_Type_vector(50,1,2,MPI_DOUBLE,&EvenElements);MPI_Type_commit(&EvenElements);MPI_Send(A,1,EvenElements,destination,.);MPI_Type_vector(count,blocklength,st

24、ride,oldtype,&newtype);第第章章消消息息傳傳遞遞編編程程 MPI通信子通信子Communicator 一個通信子是一個進程組加上一個現場。一個通信子是一個進程組加上一個現場。 進程組是進程的有限定序集。進程組是進程的有限定序集。 MPI_Comm_size MPI_Comm_size(communicator,&group_size); MPI_Comm_rank MPI_Comm_rank(communicator,&my_rank); 不同通信子中的通信是相互分開的,以及任何集合不同通信子中的通信是相互分開的,以及任何集合通信是與任何點對點通信分開的。通信是與任何點對

25、點通信分開的。第第章章消消息息傳傳遞遞編編程程 MPI通信子通信子Communicator進程進程0:MPI_Send(msg1,count1,MPI_INT,1,tag1,comm1);parallel_fft(.);進程進程1:MPI_Recv(msg1,count1,MPI_INT,0,tag1,comm1,&status);parallel_fft(.);parallel_fft:if (my_rank=0)MPI_Send(msg2,count1,MPI_INT,1,tag2,comm2);第第章章消消息息傳傳遞遞編編程程 MPI通信子通信子Communicator 預定義通信子預定

26、義通信子 MPI_COMM_WORLD MPI_COMM_SELF 通信子的管理通信子的管理 MPI_Comm_dup(comm1,&comm2); MPI_Comm_split(comm1,Color,Key,&comm2);例如:例如:MPI_Comm_split( comm, rank%3, rank/3, &comm2 );第第章章消消息息傳傳遞遞編編程程 MPI的消息緩沖區的消息緩沖區 MPI允許三種緩沖區的用法:允許三種緩沖區的用法: 只需用戶緩沖區只需用戶緩沖區 消息在用戶緩沖區之間直接傳送,兩者均在應用程序中說明,消息在用戶緩沖區之間直接傳送,兩者均在應用程序中說明,接收緩沖區

27、必須有足夠大的容量。接收緩沖區必須有足夠大的容量。 使用系統緩沖區使用系統緩沖區 消息存放到用戶接收緩沖區之前,先暫時拷貝到一個動態創消息存放到用戶接收緩沖區之前,先暫時拷貝到一個動態創建的系統緩沖區中。這會造成附加的開銷,而且無法保證系建的系統緩沖區中。這會造成附加的開銷,而且無法保證系統緩沖區有足夠的大小。統緩沖區有足夠的大小。 使用用戶級暫存緩沖區使用用戶級暫存緩沖區 由用戶說明一個有足夠容量的暫時緩沖區,消息在存入用戶由用戶說明一個有足夠容量的暫時緩沖區,消息在存入用戶接收緩沖區之前,先暫時拷貝到這個緩沖區中。接收緩沖區之前,先暫時拷貝到這個緩沖區中。第第章章消消息息傳傳遞遞編編程程

28、MPI通信通信 MPI提供較多的發送和接收例程,支持鎖定和非鎖定發送提供較多的發送和接收例程,支持鎖定和非鎖定發送/接收操作接收操作和多種緩沖區方式。和多種緩沖區方式。 鎖定發送鎖定發送/接收在消息緩沖區可安全重寫之前不能返回,而非鎖定發接收在消息緩沖區可安全重寫之前不能返回,而非鎖定發送送/接收則可立即返回。接收則可立即返回。 同步發送同步發送 在相應的接收未開始之前,發送不能返回,因此在接收方需要有應用緩在相應的接收未開始之前,發送不能返回,因此在接收方需要有應用緩沖區以保存到達的消息。非鎖定同步是指接收方不需要附加的緩沖,發沖區以保存到達的消息。非鎖定同步是指接收方不需要附加的緩沖,發送

29、方可能需要系統緩沖區。送方可能需要系統緩沖區。 緩沖發送緩沖發送 假設有一定容量的緩沖區空間可供使用,但必須由用戶程序通過例程預假設有一定容量的緩沖區空間可供使用,但必須由用戶程序通過例程預先加以說明。先加以說明。 標準發送標準發送 由具體實現自行決定。由具體實現自行決定。 就緒發送就緒發送 在肯定相應的接收已開始后進行發送,不需要象同步方式那樣等待。在肯定相應的接收已開始后進行發送,不需要象同步方式那樣等待。第第章章消消息息傳傳遞遞編編程程 MPI通信通信通信原語通信原語鎖定鎖定非鎖定非鎖定標準發送標準發送MPI_SendMPI_Isend同步發送同步發送MPI_SsendMPI_Issen

30、d緩沖發送緩沖發送MPI_BsendMPI_Ibsend就緒發送就緒發送MPI_RsendMPI_Irsend接收接收MPI_RecvMPI_Irecv完成檢查完成檢查MPI_WaitMPI_Test第第章章消消息息傳傳遞遞編編程程 MPI集合通信集合通信 廣播廣播 MPI_Bcast(Address,Count,Datatype,Root,Comm) 匯集匯集 MPI_Gather(SendAddr,SendCount,SendDatatype,RecvAddr, RecvCount,RecvDatatype,Root,Comm) 散射散射 MPI_Scatter(SendAddr,Send

31、Count,SendDatatype,RecvAddr, RecvCount,RecvDatatype,Root,Comm) 全交換全交換 MPI_Alltoall(SendAddr,SendCount,SendDatatype,RecvAddr, RecvCount,RecvDatatype,Comm) 聚集聚集 MPI_Reduce(SendAddr,RecvAddr,Count,Datatype,Op,Root,Comm) MPI_Scan(SendAddr,RecvAddr,Count,Datatype,Op,Comm) 路障路障MPI_Barrier(Comm)第第章章消消息息傳傳遞

32、遞編編程程第第章章消消息息傳傳遞遞編編程程設有三個進程,執行如下代碼:設有三個進程,執行如下代碼:int i, j, my_rank, group_size, A3, B3, tag=1, root=0;MPI_Comm comm;MPI_Init( &argc, &argv );comm = MPI_COMM_WORLD;MPI_Comm_rank( comm, &my_rank );MPI_Comm_size( comm, &group_size );for (i=0; i3; i+)Ai = Bi = my_rank*group_size+i;MPI_Bcast( A, 3, MPI_I

33、NT, root, comm );MPI_Scatter( A, 1, MPI_INT, B, 1, MPI_INT, root, comm );MPI_Scan( A, B, 1, MPI_INT, MPI_SUM, comm ); BA1120B20AP1445353P27786B86AP3BA1120B20AP1415320P27186B20AP3BA1120B20AP1445353P27789B86AP3BA1120B20AP1445153P27782B86AP3第第章章消消息息傳傳遞遞編編程程 MPI集合通信集合通信 通信子中所有進程必須調用集合通信例程。若某些成員調用通信子中所有進

34、程必須調用集合通信例程。若某些成員調用集合例程而其余的沒有調用,該代碼是錯誤的,其行為是未集合例程而其余的沒有調用,該代碼是錯誤的,其行為是未定義的。定義的。 集合通信采用標準鎖定通信方式,即進程完成集合操作中的集合通信采用標準鎖定通信方式,即進程完成集合操作中的參與動作后便立刻從集合例程中返回,此時發送緩沖區為安參與動作后便立刻從集合例程中返回,此時發送緩沖區為安全可重用的,而其他進程可能還未開始相應的集合通信。全可重用的,而其他進程可能還未開始相應的集合通信。 集合通信的同步性依賴于具體的實現,因此要求用戶負責代集合通信的同步性依賴于具體的實現,因此要求用戶負責代碼的正確性。碼的正確性。

35、在集合通信中的在集合通信中的Count和和Datatype必須是兼容的。必須是兼容的。 集合例程沒有消息標志參數,消息信封由通信子和源集合例程沒有消息標志參數,消息信封由通信子和源/目的進目的進程說明構成。程說明構成。第第章章消消息息傳傳遞遞編編程程#include “mpi.h”int foo(int i) . main( int argc, char *argv )int i, tmp, sum=0, group_size, my_rank, N; MPI_Status status;MPI_Init( &argc, &argv );MPI_Comm_size( MPI_COMM_WORL

36、D, &group_size );MPI_Comm_rank( MPI_COMM_WORLD, &my_rank );if (my_rank=0)printf( “N=“ ); scanf( “%d”, &N );for (i=1; igroup_size; i+)S1:MPI_Send( &N, 1, MPI_INT, i, i, MPI_COMM_WORLD; );for (i=my_rank; iN; i+=group_size)sum += foo(i);for (i=1; igroup_size; i+)S2:MPI_Recv( &tmp, 1, MPI_INT, i, i, MPI

37、_COMM_WORLD, &status );sum += tmp;printf (“nThe result=%dn”, sum );elseS3:MPI_Recv( &N, 1, MPI_INT, 0, my_rank, MPI_COMM_WORLD, &status );for (i=my_rank; iN; i+=group_size)sum += foo(i);S4:MPI_Send( &sum, 1, MPI_INT, 0, i, MPI_COMM_WORLD );MPI_Finalize();return 1;10)(niifoo第第章章消消息息傳傳遞遞編編程程#include #

38、include #define N 1000000main()double sum=0, local, mypi, pi, dx;long i, taskid, numtask;A:dx = 1.0/N;MPI_Init( &argc, &argv );MPI_Comm_rank( MPI_COMM_WORLD, &taskid );MPI_COMM_size( MPI_COMM_WORLD, &numtask );B:for (i=taskid; iN; i+=numtask)P:local = (i+0.5)*dx;Q:sum += 4.0/(1.0+local*local);mypi =

39、 sum*dx;C:MPI_Reduce( &mypi, &pi, 1, MPI_DOUBLE,MPI_SUM, 0, MPI_COMM_WORLD );D:if (taskid=0) printf( “pi is %lfn”, pi );MPI_Finalize();4)(1110102xarctgdxx第第章章消消息息傳傳遞遞編編程程 PVM簡介簡介 PVM也許是第一個被廣泛接受的、將工作站集群作也許是第一個被廣泛接受的、將工作站集群作為多計算機平臺的并行編程軟件包。為多計算機平臺的并行編程軟件包。 它是由美國橡樹嶺國家實驗室開發的,而且仍是一它是由美國橡樹嶺國家實驗室開發的,而且仍是一個

40、在研項目。個在研項目。 支持同構和異構計算機間的消息傳遞。支持同構和異構計算機間的消息傳遞。 它有一個庫例程集,用戶可以在它有一個庫例程集,用戶可以在C或或FORTRAN中調中調用它們。用它們。 用戶可用用戶可用PVM構造一個全互連結點集的虛擬機。構造一個全互連結點集的虛擬機。第第章章消消息息傳傳遞遞編編程程 虛擬機結構虛擬機結構 PVM系統由兩部分組成:留駐于虛擬機中每臺計算機上的稱為系統由兩部分組成:留駐于虛擬機中每臺計算機上的稱為pvmd的的PVM守護進程,以及用戶可調用的稱為守護進程,以及用戶可調用的稱為libpvm3.a的的庫。庫。 PVM系統中通常含有一個控制臺程序,用來管理虛擬機

41、、調用系統中通常含有一個控制臺程序,用來管理虛擬機、調用PVM應用作業以及監控作業的執行。應用作業以及監控作業的執行。 虛擬機也可由用戶應用程序調用虛擬機也可由用戶應用程序調用PVM庫函數庫函數pvm_addhosts和和pvm_delhosts動態地加以管理。動態地加以管理。 手動的第一個手動的第一個pvmd稱為主稱為主pvmd,其他,其他pvmd守護進程是由主守護進程是由主pvmd來啟動的,稱為從來啟動的,稱為從pvmd。主。主pvmd和從和從pvmd及其主機的及其主機的集合形成了虛擬機。集合形成了虛擬機。 在每一個主機上駐留著一個稱為主機表的數據結構,保留主在每一個主機上駐留著一個稱為主

42、機表的數據結構,保留主機的構造信息以及用作通信的報文隊列和緩沖區。主機表的機的構造信息以及用作通信的報文隊列和緩沖區。主機表的更新通過廣播方式傳播到整個虛擬機。更新通過廣播方式傳播到整個虛擬機。第第章章消消息息傳傳遞遞編編程程 主要的主要的PVM控制臺命令控制臺命令命令命令操作定義操作定義add XXXX將主機將主機XXXX加入虛擬機加入虛擬機delete XXXX從虛擬機中刪去主機從虛擬機中刪去主機XXXXconf列出虛擬機的配置列出虛擬機的配置spawn_count n app在虛擬機上啟動在虛擬機上啟動n個任務運行個任務運行appjobs列出在虛擬機中運行的任務列出在虛擬機中運行的任務h

43、alt終止所有終止所有PVM進程并關閉進程并關閉PVM第第章章消消息息傳傳遞遞編編程程 PVM中的進程管理中的進程管理 PVM允許靜態并行化和動態并行化。允許靜態并行化和動態并行化。 可通過可通過PVM控制臺的控制臺的spawn_count命令啟命令啟動一個靜態并行程序。動一個靜態并行程序。 進程在執行過程中也可以通過調用進程在執行過程中也可以通過調用PVM例程例程pvm_spawn動態創建新的并行進程。動態創建新的并行進程。第第章章消消息息傳傳遞遞編編程程 PVM中的進程管理函數中的進程管理函數PVM函數調用函數調用含義含義tid=pvm_mytid();獲取調用任務的任務獲取調用任務的任務

44、IDtid=pvm_parentv();獲取父任務的任務獲取父任務的任務IDinfo=pvm_exit();調用任務離開調用任務離開PVM,但任務仍繼續執行,但任務仍繼續執行numt=pvm_spawn(.);派生一個派生一個PVM任務任務info=pvm_kill(tid);終止一個終止一個PVM任務任務tstat=pvm_pstat(tid);獲得獲得PVM任務狀態任務狀態info=pvm_tasks(.);獲得運行在虛擬機上所有任務的信息獲得運行在虛擬機上所有任務的信息mstat=pvm_mstat(host); 獲得一臺主機的狀態獲得一臺主機的狀態info=pvm_config(.);

45、獲得整個虛擬機的配置信息獲得整個虛擬機的配置信息第第章章消消息息傳傳遞遞編編程程 pvm_spawn函數函數int pvm_spawn( char *progm, char *argv, int flag, char *where, int ntask, int *tid );參數參數意義意義char *progm可執行的文件名可執行的文件名char *argv指向參變量數組的指針指向參變量數組的指針int flag說明在哪些主機上派生等說明在哪些主機上派生等char *where在特定在特定flag下,指定一個主機下,指定一個主機int ntask要啟動的可執行的拷貝數要啟動的可執行的拷貝數

46、int *tid保存派生任務的任務識別符保存派生任務的任務識別符第第章章消消息息傳傳遞遞編編程程 編組編組(Grouping) 為支持集合操作,為支持集合操作,PVM使用了一個分離庫。使用了一個分離庫。 PVM守護進程不處理編組函數,而由名為組服務器的分離守護守護進程不處理編組函數,而由名為組服務器的分離守護進程完成分組操作。當第一個編組函數調用時,該守護進程進程完成分組操作。當第一個編組函數調用時,該守護進程被自動啟動。被自動啟動。 PVM支持動態編組,一個任務可以同時屬于不同的組;一個任支持動態編組,一個任務可以同時屬于不同的組;一個任務可以在任何時間加入或離開一個組,而無須通知其他組員;

47、務可以在任何時間加入或離開一個組,而無須通知其他組員;一個一個PVM任務在離開和重新加入一個組時,可能被分配不同的任務在離開和重新加入一個組時,可能被分配不同的成員號;一個任務可以向一個組廣播消息,也可以向非組員成員號;一個任務可以向一個組廣播消息,也可以向非組員廣播此消息。廣播此消息。 動態編組增加了程序的非確定性行為,當一個任務正在加入動態編組增加了程序的非確定性行為,當一個任務正在加入或離開一個組時,一個廣播操作可能會有不同的結果。或離開一個組時,一個廣播操作可能會有不同的結果。第第章章消消息息傳傳遞遞編編程程 PVM編組函數編組函數PVM函數調用函數調用含義含義inum=pvm_joi

48、ngrou(groupname);加入一個組,并獲得成員號加入一個組,并獲得成員號info=pvm_lvgroup(groupname);離開一個組離開一個組tid=pvm_gettid(groupname,inum);從成員號獲得任務從成員號獲得任務IDinum=pvm_getinst(groupname,tid); 從任務從任務ID獲得成員號獲得成員號gsize=pvm_gsize(groupname);獲得組的大小獲得組的大小info=pvm_barrier(groupname,n);任務阻塞直到組中的任務阻塞直到組中的n個成員均已調用個成員均已調用pvm_barrierinfo=pvm

49、_bcast(groupname,tag);向組中(除自身外)廣播由向組中(除自身外)廣播由tag標識的標識的消息消息info=pvm_reduce(.);歸約歸約第第章章消消息息傳傳遞遞編編程程 任務識別符任務識別符 PVM使用一個使用一個32位整數對虛擬機中的任務、組或位整數對虛擬機中的任務、組或pvmd進行編址,稱為任務標識符。進行編址,稱為任務標識符。31302918170SGHLpvmd組組主機字段主機字段本地字段本地字段第第章章消消息息傳傳遞遞編編程程 PVM通信通信 PVM中有三類通信:守護進程之間、守護進中有三類通信:守護進程之間、守護進程進任務之間、任務與任務之間的通信。程進任務之間、任務與任務之間的通信。 PVM假設虛擬機中各主機間能通過假設虛擬機中各主機間能通過TCP和和UDP相連接。相連接。pvmd1pvmd2task1task2UDPTCPTCPTCP第第章章消消息息傳傳遞遞編編程程 PVM通信函數通信函數 PVM用戶通過一組高層通信函數進行通信,用戶通過一組高層通信函數進行通信,而不須知道具體的通信類型。而不須知道具體的通信類型。 在任務給定時間,在任務給定時間,PVM任務只有一個活動發任務只

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論