0
我一直在使用MPI一段時間,但我沒有經歷過。所以 我來這裏要問關於以下實現的一般結構的建議。 說,我有並行運行在MPI內的可執行文件在C++
MPI_Init(&narg,&arg);
int me,nprocs;
MPI_Comm_rank(MPI_COMM_WORLD,&me);
MPI_Comm_size(MPI_COMM_WORLD,&nprocs);
int N = 10;
for (int i=0;i<N;i++) {
//(1)do some stuff in parallel...
//(2)gather results and write an input file for executable
MPI_Barrier(MPI_COMM_WORLD);
//(3)run executable in parallel.
// which is usually run from command line as:
//
// mpirun -np 6 external.exe < input.file
//
MPI_Barrier(MPI_COMM_WORLD);
//(4)gather output from executable, distribute info among processors and keep running
}
MPI_Finalize();
主要的C++文件,它是(3)在那裏我瞭解如何做到這一點,並告訴它多少個處理器可以使用一個問題。我的困惑還在於某種「運行」命令可能應該從單個處理器/實例中執行。那麼如何讓它工作並讓並行可執行文件使用提供給主程序的所有處理器?如果可能。
p/s /我在這裏看到類似的問題在stackoverflow,但沒有明確的答案,如果可能與否。
問題是,外部可執行文件能夠使用這6個處理器嗎?他的MPI_Init和主程序中調用的MPI_Init之間會不會有崩潰?或者從單個實例執行「mpirun」是否完全安全? – Denis 2013-03-28 13:03:57
@Denis:從['mpirun'手冊頁](http://linux.die.net/man/1/mpirun)引用:*「mpirun」是一個shell腳本,它嘗試隱藏各種啓動作業的差異來自用戶的設備*。鑑於此,我認爲這樣可以。 如果你不確定,我建議你寫一個小型的試用版exe,然後自己去看看。如果遇到問題,首先爲主程序創建一個新的通信器,以免與外部exe中使用的通信器發生衝突(如果這會造成問題 - 我不知道「MPI_Initialize」的細節等等)。 – 2013-03-28 14:07:55
感謝您的回覆,我會嘗試在一個小程序中檢查它,並標記答案,如果它工作... – Denis 2013-03-28 14:13:35