2013-02-15 47 views
-1

我有一個系統使用POSIX編譯我的程序與g ++,但是,我有機會訪問一個有多個處理器的大機器,它必須有mvapich2和openmpi模塊,我認爲openmpi應該是我的系統遷移的正確選擇。 問題是,我沒有太多的openmpi經驗,我不知道如何將我的程序遷移到這個新的環境。程序從pthread(posix)遷移到openmpi

讀一點我認爲我必須使用MPI函數來執行我的系統在這個環境中工作並更改POSIX函數?

在本節中,我調用pthread函數來處理線程,我認爲這些線程是常用指令。

Thread::Thread(PFUNC func, void * arg) 
{ 
     pthread_detach(pthread_self()); 
     pthread_attr_t attr; 
     pthread_attr_init(&attr); 
     pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); 
     int s = pthread_create(&xThreadId, &attr, func, arg); 
    if (s != 0) 
      throw EXCEPT_NOTHREAD; 

     pthread_attr_destroy(&attr); 
     pthread_detach(pthread_self()); 

} 

我的系統的工作原理,以及用旗語,互斥,我需要更換,以及使用信號量和互斥的?怎麼樣?。請告知如何解決這個問題,如果我真的需要更改我的程序或者有一個技巧,請避免更改我的程序並在openmpi環境中運行它。

非常感謝

+2

不,您需要嚴格更改程序才能使用MPI功能集而不是pthread。我可以在這裏給出的唯一答案是去看看MPI的參考資料,沒有一個靈丹妙藥。 – slugonamission 2013-02-15 20:21:50

+0

謝謝。任何文件解釋如何做到這一點? – West14 2013-02-16 11:09:31

+1

MPI和線程之間最基本的差異在於,當MPI數據被顯式作爲線程共享其內存(共享內存)時具有單獨內存空間(分佈式內存)的實體之間的消息傳遞時。這可能需要對程序中的數據結構和算法進行大量更改,以使它們更適合分佈式存儲,例如,最大限度地減少傳遞的消息的數量/數量。 – 2013-02-18 16:52:47

回答

0

從多線程程序的並行MPI程序去,這不是一個簡單的任務,你將有機會學習MPI並有可能是沒有辦法解決這個。

我會先從基本的MPI的例子有一個快速google search

很多發現也向我推薦參考文檔,你MPI實現(你提到openmpi),也指MPI standard documentation

+0

感謝您的回覆,我會真正appreaciate如果你有任何網站,我可以找到這兩種方法之間的區別。謝謝。 – West14 2013-02-17 11:47:46

+0

@Edison通過快速的谷歌搜索檢查我找到的鏈接.... – pyCthon 2013-02-17 15:41:38