Правильный способ ОСТАНОВИТЬ с MPI - PullRequest
5 голосов
/ 17 декабря 2010

Я использую MPI, и в некоторые моменты хочу использовать STOP (или другой метод), чтобы выйти из программы с сообщением об ошибке.

Прямо сейчас я делаю что-то вроде этого:

STOP 'Error'

Но я чувствую, что делаю что-то не так. Нужно ли сначала вызывать MPI_FINALIZE? Есть ли что-то еще, чем можно заняться?

Ответы [ 3 ]

9 голосов
/ 17 декабря 2010

В случае катастрофической ошибки обычным способом выхода является call MPI_Abort(MPI_COMM_WORLD, errcode, ierr).В большинстве реализаций это убьет все задачи.В менее серьезных ситуациях вы можете убедиться, что все задачи знают об этом условии, а затем сделать так, чтобы все они возбуждались более изящно с помощью MPI_Finalize.

6 голосов
/ 17 декабря 2010

Взгляните на MPI_Abort :

Поведение MPI_ABORT (comm, код ошибки), для comm, отличного от MPI_COMM_WORLD, зависит от реализации. С другой стороны, вызов MPI_ABORT (MPI_COMM_WORLD, код ошибки) всегда должен вызывать все процессы в группе MPI_COMM_WORLD для отмены .

0 голосов
/ 21 ноября 2018

Тестируя это на суперкомпьютерах NERSC, я обнаружил, что

call MPI_FINALIZE(ierr)
stop

не может остановить всю программу. Следующие работы:

 call MPI_Abort(MPI_COMM_WORLD, errcode, ierr)
 stop
...