0

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);
}

さらなるアクションを決定するために、エラーコードをシェルに戻すことができません。2つのエラーメッセージはどちらも出力されません。エラーコードやメッセージを専用のファイルに書いてみようかなと思います。

誰かが同様の問題を抱えたことはありますか?信頼できるエラー報告を行うためにあなたが考えたオプションは何でしたか?

編集:
問題は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 $?

そして、最終的に必要なエラーコードを取得しました。

4

1 に答える 1

1

MPI_Abortが機能するはずです。

 int MPI_Abort( MPI_Comm comm, int errorcode )
于 2010-03-19T12:09:28.720 に答える