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

时间:2010-03-19 12:04:58

标签: mpi

MPI standard(第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 $?

然后我最终得到了我想要的错误代码。

1 个答案:

答案 0 :(得分:1)

MPI_Abort应该可以工作。

 int MPI_Abort( MPI_Comm comm, int errorcode )