225
более удобно и более эффективно не проверять ошибки после каждого
вызова, а иметь специализированный обработчик ошибок.
После того, как ошибка обнаружена, состояние MPI является не-
определенным. Это означает, что даже если используется определен-
ный пользователем обработчик ошибок или обработчик
MPI_ERRORS_RETURN, не обязательно, что пользователю будет
разрешено продолжить использовать MPI после того, как ошибка оп-
ределена. Цель таких обработчиков состоит в том, чтобы пользователь
получил определенное им сообщение об ошибке и предпринял дейст-
вия, не относящиеся к MPI (такие, как очистка буферов ввода/вывода)
перед выходом из программы. Реализация MPI допускает продолже-
ние работы приложения после возникновения ошибки, но не требует,
чтобы так было всегда. Обработчик ошибок MPI является скрытым
объектом, связанным с дескриптором. Процедуры
MPI обеспечивают
создание новых обработчиков ошибок, связывают обработчики оши-
бок с коммуникаторами и проверяют, какой обработчик ошибок свя-
зан с коммуникатором. Существует несколько функций MPI, обеспе-
чивающих обработку ошибок.
MPI_ERRHANDLER_CREATE( function, errhandler )
IN function установленная пользователем процедура обработки ошибок
OUT errhandler MPI обработчик ошибок (дескриптор)
int MPI_Errhandler_create(MPI_Handler_function *function,
MPI_Errhandler *errhandler)
MPI_ERRHANDLER_CREATE(FUNCTION, ERRHANDLER, IERROR)
EXTERNAL FUNCTION
INTEGER ERRHANDLER, IERROR
Функция MPI_ERRHANDLER_CREATE регистрирует процеду-
ру пользователя в качестве обработчика исключений. Возвращает в
errhandler дескриптор зарегистрированного обработчика исключе-
ний. В языке C процедура пользователя должна быть функцией типа
MPI_Handler_function, которая определяется как:
typedef void (MPI_Handler_function) (MPI_Comm *, int *, ...);
Первый аргумент является идентификатором используемого ком-
муникатора, второй является кодом ошибки, который будет возвра-
щен процедурой MPI,
выявившей ошибку. Если процедура возвратила
MPI_ERR_IN_STATUS, то это значит, что код ошибки возвращен в
статусный объект обращения, которое запустило обработчик ошибок.