返回 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 实现能够从错误中恢复并继续执行程序。