2011-03-24 32 views
0

我想問問有沒有人知道boost :: mpi初學者的文檔? (我已經從Internet站點閱讀Boost.MPI文檔)。使用Boost爲MPI設計共享內存

有一點關於我的系統,我有一個約90節的碎石,每個節有兩個CPU,兩個核心(4個核心在一起)和4Gb RAM。

我想定義每個結的共享內存,並且存儲矢量std::vector<bool> occupation;。然後每個進程需要根據他的rank()號碼來計算一些東西。

現在,所有的多進程需要等到所有內核完成計算,然後發送一個載體,std::vector<uint32_t> remove;,主處理(rank() == 0)將更新載體occupation,然後發送到所有結新occupation向量。

這可能是它最好使用簡單的mpi.h而不是boost::mpi

我想聽聽您的意見,因爲我沒有這方面的MPI經驗。

回答

0

如果您的編譯器支持它,請考慮使用OpenMP作爲共享內存部分,然後爲每個節點設置一個進程,以執行當前設置中四個進程的功能。 MPI並不是專爲共享內存而設計的。

0

正如larsmans所說,你不能真正與MPI共享內存。但是這聽起來像你並不需要分佈式共享內存;聽起來好像所有的任務都需要在開始時獲得occupation的副本,進行計算,將結果以remove的形式發回給主人,然後主人再廣播occupation的更新副本。 MPI可以做到這一點。

一開始將有主過程中使用broadcast做初步數據的發送方式,有工作進程使用send將更新發送回主,並有主recv從每個任務中的數據;當這些完成時,循環會重演。

+0

感謝您的回答。讓我們假設'佔領'是'2^30'布爾元素的大小,那麼每個過程都需要1Gb,在那裏我只需要一個所有4個核心的「職業」向量......這就是我的原因問題 – Eagle 2011-03-24 23:15:33

+0

解決這個問題的一種方法是在節點之間使用MPI,並在節點內部使用OpenMP等線程方法;那麼每個節點只需要一個副本,如果每個節點都有4Gb,那麼這很好。否則,是否有一些計算結構 - 不需要同時需要所有職業的所有任務? – 2011-03-24 23:37:01

+0

「職業」是程序的中心,大部分計算都需要在計算過程中訪問這個向量。我搜索了一下網絡,而我正在尋找的是混合編程? (MPI和OpenMP的組合) – Eagle 2011-03-24 23:49:55