[問題] MPI 相關,執行緒失蹤

作者: GeoMeTric ( )   2014-08-06 23:58:23
開發平台(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 次迴圈的訊息(幾天時間),也因此
整個程式於核心間的資料傳輸過程中卡住,無法繼續運行。
不知版上各位對於這個問題,有無朝哪方向著手除錯的想法/建議?
作者: sunneo (艾斯寇德)   2014-08-07 02:58:00
讓行程定期寫入檔案,說自己進入/離開哪個 函式/行數用signal,收SIGQUIT,SIGTERM,SIGINT收到訊息印一下前一刻他還在哪行這樣也許ENOMEM,EPIPE...你的程式要檢查每個MPI的回傳值
作者: cywec   2014-08-07 16:53:00
感覺是存取違規才發生當中一個點中斷結束,你要不要檢查一下你的資料切割範圍

Links booklink

Contact Us: admin [ a t ] ucptt.com