2012-07-02 321 views
3

對於那些長期在野外工作的人來說,我的問題可能看起來很愚蠢,但是我很感謝你爲我的精心準備。什麼是MPI,MPICH和OPENMPI?在這種情況下,「實施」意味着什麼?

當他們說MPICH是MPI的「實現」時,這意味着什麼?

是以下類推真(?): 如果我們認爲MPI作爲一個FORTRAN編譯器的一套標準,然後MPICH和的openmpi不同版本的Fortran編譯器,像Intel.Fortran,Compaq.Fortran, GNU.Fortran等等。

+2

是的,實現是類似的。不幸的是你的問題不適合StackOverflow。 –

回答

6

MPI是一個標準:它概述了分佈式系統中消息傳遞的特定模型。然而,它只提供了一系列要求:它實際上並不包含任何代碼,也沒有具體說明這些需求究竟需要如何完成。例如,看一看從官方MPI 2.2規範這個片段(如今天的):

有效MPI實現保證 點對點通信,在該部分中描述的某些一般性質。

訂單消息是非超車:如果發送者發送兩個消息相繼到相同的目的地,以及兩者匹配同一 接收,則該操作不能接收該第二消息,如果 第一個仍懸而未決。

然後它繼續解釋這個要求的基本原理,並提供了一個例子,但沒有提到關於需求本身的更多內容。

MPI實現是一個庫,可滿足MPI規範中的所有需求 - 如上所述。但是,該標準完全沒有關於哪些語言結構,操作系統調用,第三方庫等可以/不能/不應該使用的要求。有時,它會給建議實現者,就像這樣:

建議實現者。該實現可能會保留使用該數據類型的活動通信的引用計數 ,以便決定何時釋放該數據類型 。此外,可以實現派生的 數據類型的構造函數,以便它們保持指向其數據類型參數的指針 而不是複製它們。在這種情況下,需要跟蹤 活動數據類型定義參考,以便知道何時可以釋放對象的數據類型 。 (建議實施者結束)

然而,這些都還是模糊的,很語言無關,只建議:實現可以忽略這些建議的每一個,仍然符合標準。

所以,實質上它與編譯器的各種實現類似。如果一個程序需要一種語言的有效源代碼,並且產生的二進制代碼完成語言規範說明的任何事情,它應該給出原始的源代碼,它就是該語言的一致性編譯器。同樣,如果您可以使用庫以不破壞MPI規範的任何規則的方式傳遞消息,那麼這是一個有效的MPI實現。

相關問題