開發平台(Platform):
gcc 4.1.2 / mpich 1.2.7p1
問題(Question):
雖然程式是以 C 寫成,但問題與 MPI 較相關聯,如不妥於此發問,煩請告知。
程式於單一核心執行時並無問題(使用 gcc 編譯並執行,或使用 mpicc 編譯並
只使用一個核心執行,此兩種情況)。但當使用兩個以上的核心執行時,在其中
一個 while 迴圈運行時,中途會發生其中一個指定的核心消失,導致於迴圈中
用於資料傳輸的 MPI_Wait 等不到訊息而卡住。
程式碼(Code):(請善用置底文網頁, 記得排版)
由於程式用途為數值模擬,有點繁雜,所以這裡僅列出(或許是)重點部份並簡化。
i = 1;
while (statement) {
printf ("Processor %d starts iteration %d\n", Rank, i);
fflush (stdout);
transfer data via MPI_Isend / MPI_Irecv / MPI_Wait
call some subroutines and do jobs
i += 1;
printf ("Processor %d ends iteration %d\n", Rank, i);
fflush (stdout);
}
其中迴圈內頭尾訊息輸出為除錯用,Rank 為使用 MPI_Comm_rank 得到的值。
假設使用(同節點的)兩個核心執行時,程式最後輸出訊息為
Processor 0 starts iteration 275
Processor 1 starts iteration 275
Processor 1 ends iteration 275
Processor 0 ends iteration 275
Processor 0 starts iteration 276
但一直沒出現 Processor 1 執行第 276 次迴圈的訊息(幾天時間),也因此
整個程式於核心間的資料傳輸過程中卡住,無法繼續運行。
不知版上各位對於這個問題,有無朝哪方向著手除錯的想法/建議?