2013-07-03 75 views
0

我正試圖在EPOS操作系統中實現MPI協議。那麼,其實我不明白如何實現MPI_Comm。它被定義爲「MPI用於確定通信中涉及哪些進程的基本對象」。在一些實現, 我在互聯網上找到了被實現爲的typedef INT MPI_Comm,但我怎麼能知道 其過程涉及使用INT MPI_Comm通信?任何想法?如何在MPI協議中實現MPI_Comm?

謝謝。

回答

0

當一個實現爲MPI_Comm使用一個int時,它實際上將它用作對內部數組的引用,它在內部跟蹤內部通信器的所有必要信息。

1

似乎有兩種方法,幾乎​​相同。

  • 首先是typedef int MPI_Comm,並使用該值作爲一個指數到一些內部數據結構保持所述實際信息。

  • 第二種是typedef struct comm_info* MPI_Comm其中通信器(或任何其他MPI類型)是直接指向內部結構的指針。 OpenMPI採用這種方法。

使用int的優點是,只要內部數據結構同步,在所有處理器上使用相同的索引可能會更容易。

但是爲什麼在OpenMPI和MPICH已經做了這麼多並且是開源的時候重新發明了輪子?特別是MPICH許可證是非常寬容的。很多供應商都在其上建立了自己的商業MPI庫。檢查出their license

+0

謝謝!那麼,這是一個操作系統課程的工作,所以需要製作我自己的實施版本。其他疑問:我的實現將有一個內部數據結構(比如說'x'),其中包含通信中涉及的每個ID進程(例如使用MPI_Comm)。如果有很多機器運行MPI程序,並且我希望這些機器彼此通信,我將如何將每個MPI程序的ID保存爲'x'?而且每個MPI程序都有自己的'x',所以這會是一個問題? – user2069668

+0

@ user2069668除了像'MPI_COMM_WORLD'這樣的內置通信器,用戶必須首先使用'MPI_Comm_create'創建通信器。你可以在那裏進行初始化。請記住,這也取決於用戶使該通信器中的所有處理器在「相同」時間和相同參數下調用MPI_Comm_create。這應該允許你初始化你的結構而不需要傳遞任何消息,因爲每個處理器都會得到相同的結構'x'。 – Adam