从MPI程序返回错误代码的可靠方法是什么?

从MPI程序返回错误代码的可靠方法是什么?,mpi,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

报告(第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程序。我的_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 $?
然后我最终得到了我想要的错误代码。

MPI\u中止应该可以工作

 int MPI_Abort( MPI_Comm comm, int errorcode )

退出不起作用我并不感到惊讶,但是
MPI\u Abort()
应该可以。您到底是如何尝试使用
MPI\u Abort()
?您使用的是哪种MPI实现?一般来说,MPI\u Abort是一个合理的建议。但是,永远不要从信号处理程序中调用它。结果行为是未定义的,在大多数情况下会挂起。OP询问返回错误代码(与更一般的“返回代码”相反),因此我觉得值得一提的是警告。