我有一個系統使用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環境中運行它。
非常感謝
不,您需要嚴格更改程序才能使用MPI功能集而不是pthread。我可以在這裏給出的唯一答案是去看看MPI的參考資料,沒有一個靈丹妙藥。 – slugonamission 2013-02-15 20:21:50
謝謝。任何文件解釋如何做到這一點? – West14 2013-02-16 11:09:31
MPI和線程之間最基本的差異在於,當MPI數據被顯式作爲線程共享其內存(共享內存)時具有單獨內存空間(分佈式內存)的實體之間的消息傳遞時。這可能需要對程序中的數據結構和算法進行大量更改,以使它們更適合分佈式存儲,例如,最大限度地減少傳遞的消息的數量/數量。 – 2013-02-18 16:52:47