廣告:
 

平行處理程式的API

Intel 的James Reinders 解釋訊息傳遞介面(MPI)——一個平行處理的API

我是 James Reinders,現在我們來談談一個介面——“訊息傳遞介面”。這是一個 API,用於實現平行性。 訊息傳遞介面通常和超級電腦聯繫在一起,因此在討論多核心處理器時,你不一定熟悉它,不過我認為這個介面值得研究和理解。 你未必會使用它,但最好知道它是可用的以及它是什麼。

放眼現在的多核心系統,比如 一 個四核心處理器或兩個雙核處理器,在對其程式設計時都可以假設每個執行緒、每個處理器對記憶體都有同等的存取權。因此,處理器 1 能將某些資料寫入記憶體,處理器 4 或執行緒 4 同樣也能存取同一處記憶體。這就是一種非常簡單的模式——記憶體共享模式。

在這個特定的例子中,我們假定程式運行在 4 個處理器上,所有處理器都將讀寫記憶體,各處理器之間都按此方式通訊。假設我們以不同的方式建構了 1 台機器,或者我們假定這是 1 台不同的機器,而且我們將各處理器限制為只處理它獨佔控制的資料,各處理器之間的唯一的通訊為訊息傳遞。通常,1 個處理器能和其他任何 1 個處理器或任何處理器組合通訊。例如,處理器 2 能傳遞一個消息到處理器 4 等等。

這樣一來,可在每個處理器上都運行一個執行緒。這就好比是人們分別待在相鄰的房間中,但是不能像一起坐在同一間房間中的桌旁那樣談話,只能寫下想交流的內容,再從門底下互相傳遞。這種方式限制了正在進行的通訊量,但是有一個巨大優勢。它強制實行問題分解規範,因此問題在各處理器上能很好地運行,並且主要使用本身資料,偶爾才在各處理器之間共用資訊。按此方法寫成的程式通常擴展性更好。倒不是 MPI(訊息傳遞介面)增強了程式的擴展性,而是按此規範撰寫程式時,程式的自身包容性更高——各處理器均使用本身記憶體。實際上,無論機器中是否採用和現代機器中四核心處理器一樣的記憶體共享型處理器,只要是只使用自有記憶體區段,就能獲得性能提升。

以上是對 MPI 的簡單介紹。MPI 有幾種簡單的呼叫,比如“MPI_Send”和“MPI_Recv”。當然,你可執行初始化以及其他一些呼叫操作,不過在呼叫時,你需要傳遞此呼叫、緩衝區、緩衝區長度及其它一些往返共用的參數。某個處理器執行發送操作後,資料就發送到另外一個執行相應接收操作的處理器上,由其接收資料。這在寫程式實現上並不是非常困難。需要按規範分解程式,而且要在相當低的層次上撰寫並考慮如何實現平行性,顯然不是每個人都適合。不過我認為很重要的一點是要理解訊息傳遞是什麼,並知道它是可用的。當然,在我們見到機器變成 8 核及 16 核時,這顯然已進入到超級電腦領域,而 MPI 作為傳統早已在此領域中廣泛使用,將來從 10 核到 1000 核都能很好地適應,事實證明,這是一種非常高效率的程式設計。這種程式設計方式未必有趣,因為需要做大量工作,但是它確實非常有效。

你能從這裡獲得更多相關資訊:www.mpi-forum.org。在這裡可以找到有關 MPI 的文件和標準規格等等。另一個地方就是 Wikipedia。查看 message passing interface 或搜尋 MPI 即可。你會找到大量資訊以及簡單的應用程式等。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

多核心處理器有前途嗎?

瞭解多核心處理器的功率消耗、記憶體和平行指令集

瞭解任務與資料的平行處理功能

任務和資料並行之間的差異,以及如何避免Amdahl定律 施加的限制。

關於三項平行處理功能必須要知道的事

Intel 的James Reinders指出,在管理多核心系統方面,可擴展性、正確性和可維護性全都是關鍵的重要因素。

平行處理功能之抽象方法

處理原始執行緒是平行處理應該避免的問題之一。抽象化為解決這個問題提供了一種方法…

成功的平行處理程式設計

一些開發人員在撰寫平行處理系統程式時,力求改善工作效率會重複出現的話題。

平行處理程式的基礎:第一部分

瞭解執行緒構造區塊的核心演算法——一個平行程式C++範本庫。

平行處理程式的基礎:第二部分

Intel的James Reinders深入探究執行緒結構基礎——一個平行處理程式C++範本庫。

平行處理程式的API

Intel 的James Reinders 解釋訊息傳遞介面(MPI)——一個平行處理的API

廣告