Я использую MPI, и в некоторые моменты хочу использовать STOP (или другой метод), чтобы выйти из программы с сообщением об ошибке.
Прямо сейчас я делаю что-то вроде этого:
STOP 'Error'
Но я чувствую, что делаю что-то не так. Нужно ли сначала вызывать MPI_FINALIZE? Есть ли что-то еще, чем можно заняться?
В случае катастрофической ошибки обычным способом выхода является call MPI_Abort(MPI_COMM_WORLD, errcode, ierr).В большинстве реализаций это убьет все задачи.В менее серьезных ситуациях вы можете убедиться, что все задачи знают об этом условии, а затем сделать так, чтобы все они возбуждались более изящно с помощью MPI_Finalize.
call MPI_Abort(MPI_COMM_WORLD, errcode, ierr)
MPI_Finalize
Взгляните на MPI_Abort :
Поведение MPI_ABORT (comm, код ошибки), для comm, отличного от MPI_COMM_WORLD, зависит от реализации. С другой стороны, вызов MPI_ABORT (MPI_COMM_WORLD, код ошибки) всегда должен вызывать все процессы в группе MPI_COMM_WORLD для отмены .
Тестируя это на суперкомпьютерах NERSC, я обнаружил, что
call MPI_FINALIZE(ierr) stop
не может остановить всю программу. Следующие работы:
call MPI_Abort(MPI_COMM_WORLD, errcode, ierr) stop