返回 MPI 呼叫的值
幾乎任何 MPI 呼叫都返回一個整數錯誤程式碼,表示操作成功。如果沒有錯誤發生,返回碼為 MPI_SUCCESS
:
if (MPI_Some_op(...) != MPI_SUCCESS)
{
// Process error
}
如果發生錯誤,MPI 會在返回使用者程式碼之前呼叫與通訊器,視窗或檔案物件關聯的錯誤處理程式。有兩個預定義的錯誤處理程式(使用者可以定義其他錯誤處理程式):
MPI_ERRORS_ARE_FATAL
- 錯誤導致 MPI 程式終止MPI_ERRORS_RETURN
- 錯誤導致錯誤程式碼傳遞迴使用者
通訊器和視窗的預設錯誤處理程式是 MPI_ERRORS_ARE_FATAL
; 對於檔案物件,它是 MPI_ERRORS_RETURN
。MPI_COMM_WORLD
的錯誤處理程式也適用於與物件無關的所有操作(例如,MPI_Get_count
)。因此,在不將錯誤處理程式設定為 MPI_ERRORS_RETURN
的情況下檢查非 I / O 操作的返回值是多餘的,因為錯誤的 MPI 呼叫將不會返回。
// The execution will not reach past the following line in case of error
int res = MPI_Comm_size(MPI_COMM_WORLD, &size);
if (res != MPI_SUCCESS)
{
// The following code will never get executed
fprintf(stderr, "MPI_Comm_size failed: %d\n", res);
exit(EXIT_FAILURE);
}
要啟用使用者錯誤處理,必須先更改 MPI_COMM_WORLD
的錯誤處理程式:
MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
int res = MPI_Comm_size(MPI_COMM_WORLD, &size);
if (res != MPI_SUCCESS)
{
fprintf(stderr, "MPI_Comm_size failed: %d\n", res);
exit(EXIT_FAILURE);
}
MPI 標準不要求 MPI 實現能夠從錯誤中恢復並繼續執行程式。