MPI 标准(第295 页)说:
给用户的建议。错误代码是从可执行文件返回还是从 MPI 进程启动机制(例如,mpiexec)返回,是 MPI 库质量的一个方面,但不是强制性的。
事实上,我没有成功运行以下代码:
if(0 == my_rank)
{
FILE* parameters = fopen("parameters.txt", "r");
if(NULL == parameters)
{
fprintf(stderr, "Could not open parameters.txt file.\n");
printf("Could not open parameters.txt file.\n");
exit(EXIT_FAILURE); //Tried MPI_Abort() as well
}
fscanf(parameters, "%i %f %f %f", N, X_DIMENSION_Dp, Y_DIMENSION_Dp, HEIGHT_DIMENSION_Dp);
fclose(parameters);
}
我无法将错误代码返回到 shell 中,以便对进一步的操作做出决定。两个错误消息都不会打印。我想我可能会将错误代码和消息写入专用文件。
有没有人遇到过类似的问题,您考虑过哪些选项可以进行可靠的错误报告?
编辑:
问题不是由 MPI 引起的。真正错误的是我处理调度程序返回的错误代码的方式。我使用安装了 LoadLeveler 的系统。首先我做
$ llsubmit my_job_file.sh
然后在完成工作后,我会收到包含工作状态的电子邮件,并返回错误代码。在我的情况下,即使我的 MPI 程序已使用 MPI_Abort 函数退出,错误代码也始终为零。然后我意识到返回的错误代码是脚本 my_job_file.sh 本身的错误代码,而不是在脚本中运行的 MPI 程序。my_job_file.sh 看起来像这样:
# @ different LoadLeveler options ...
poe ./my_mpi_program > my_mpi_program.output
然后我将其修改为
# @ different LoadLeveler options ...
poe ./my_mpi_program > my_mpi_program.output
exit $?
然后我终于得到了我想要的错误代码。