Стандарт 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);
}
Я не могу вернуть код ошибки обратно в оболочку, чтобы принять решение о дальнейших действиях. Ни одно из двух сообщений об ошибках не печатается. Я думаю, что я могу написать коды ошибок и сообщения в отдельный файл.
Кто-нибудь когда-нибудь сталкивался с подобной проблемой, и какие варианты вы рассматривали для создания надежного сообщения об ошибке?
EDIT:
Проблема не была вызвана 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 $?
и, наконец, я получил нужный код ошибки.