[問題] MPI 相關,執行緒失蹤
開發平台(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 次迴圈的訊息(幾天時間),也因此
整個程式於核心間的資料傳輸過程中卡住,無法繼續運行。
不知版上各位對於這個問題,有無朝哪方向著手除錯的想法/建議?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.94.74
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1407340706.A.215.html
推
08/07 02:58, , 1F
08/07 02:58, 1F
→
08/07 03:00, , 2F
08/07 03:00, 2F
→
08/07 03:02, , 3F
08/07 03:02, 3F
→
08/07 03:07, , 4F
08/07 03:07, 4F
→
08/07 16:53, , 5F
08/07 16:53, 5F
→
08/07 16:54, , 6F
08/07 16:54, 6F
感謝兩位的建議,後來繼續檢查時想到另一種可能性(也是問題所在)。
問題點在於因為邏輯錯誤造成 while 迴圈的控制變數的增加量,並沒有
正確地(使用 MPI_Allreduce)傳給各核心,也使得其中一核心提早結束
迴圈。間接產生失蹤的錯覺...XD
※ 編輯: GeoMeTric (140.114.94.74), 08/08/2014 06:16:25