1. 程式人生 > >MPI,同步/非同步,阻塞/非阻塞通訊,集合通訊,Gather/Scatter

MPI,同步/非同步,阻塞/非阻塞通訊,集合通訊,Gather/Scatter

1. MPI

MPI(Message Passing Interface)是一種訊息傳遞介面,是一個訊息傳遞漢書庫的標準說明。在基於MPI程式設計模型中,計算是由一個或多個彼此通過呼叫庫函式進行訊息收、發通訊的程序所組成。MPI為程式設計師提供一個並行環境庫,程式設計師通過呼叫MPI的庫程式來達到程式設計師所要達到的並行目的。

2.同步/非同步

二者區別主要在於:傳送操作是否要等 “接收程序接收訊息完成” 才完成

同步傳送操作: 只有等訊息被接收程序安全接收後才算完成。(資料發出去了,而且被接收程序安全接收了,才完成)

非同步傳送操作:  操作完成後,訊息不一定被接收程序接收。(只要把訊息發出去就算完成,不管有沒有接收)

3.阻塞/非阻塞通訊

二者區別主要在於:呼叫完成是否依靠某些“事件”

阻塞通訊:呼叫完成要依賴某些“事件”。(阻塞傳送或接收的 函式內部 會等待這個“事件“:”事件“沒發生,函式就阻塞在那裡;”事件“發生了,函式才返回)

              阻塞傳送:資料必須成功的傳送或被拷貝到系統緩衝區,使得該資料緩衝區可被重新使用。這個“事件”發生,函式才返回,傳送操作才完成。                   

              阻塞接收:資料必須保證接收到本地緩衝區。這個“事件“發生,函式才返回,接收操作才完成。

非阻塞通訊:不等任何“事件”,就可完成,不保證資料已正確傳送或接收。(發完或接收操作發起後,不等”事件“,直接返回。但是,如果要想知道資料有沒有被正確傳送或接收,要使用wait(), test()查詢)

4.同步阻塞傳送/同步無阻塞傳送(非同步都是非阻塞)

同步阻塞傳送:傳送操作要等訊息被安全接收才算完成。傳送操作本身使阻塞,要等某“事件”,傳送操作才返回。(傳送返回了,說明“事件“肯定發生了。不需要再用wait() test() 查詢)

同步非阻塞傳送:傳送操作要等訊息被安全接收才算完成。但是,要想知道資料被正確接收,要用wait(),test這些函式查詢。

5.集合通訊

通訊因子包含一個相互之間通訊的程序組。

集合通訊是包含在通訊因子中的所有程序都參加操作。

集合操作的三種類型:

        同步:集合中所有程序都到達後,每個程序再接著執行;

        資料傳遞: 廣播(Broadcast),  分散(Scatter), 收集(Gather),全部到全部(Alltoall)。

        規約:集合中的一個程序收集說有程序的資料並計算(如:求最大值,最小值,加,乘)

集合操作是阻塞的。

(1)廣播(Broadcast)



(2) 分散(Scatter)



(3) 收集(Gather)



(4)全部到全部(Alltoall)


(5)allgather



注:本文參考神威1計算機系統 MPI培訓手冊