По умолчанию, ошибки связи фатальны - MPI_ERRORS_ARE_FATAL является обработчиком по умолчанию для MPI_COMM_WORLD. Ошибки ввода-вывода обычно менее катастрофичны, чем ошибки связи (например, ``файл не найден''), и обычно принято их перехватывать и продолжать выполнение. Поэтому MPI предоставляет дополнительные возможности обработки таких ошибок.
Совет пользователям: MPI не определяет состояние вычислений после ошибочного вызова функции MPI. Высококачественная реализация должна поддерживать обработку ошибок ввода-вывода, позволяя пользователям писать программы с использованием общепринятой практики работы с вводом-выводом.
Как и коммуникаторы, каждый файловый дескриптор имеет свой связанный с ним обработчик ошибок. Функции обработки ошибок ввода-вывода для MPI-2 описаны в главе I-7.5.1.
Когда MPI вызывает определенный пользователем обработчик ошибок, связанный с ошибкой, произошедшей с конкретным дескриптором файла, первые два аргумента, передаваемые обработчику - дескриптор файла и код ошибки. Для тех ошибок, которые не связаны с допустимым дескриптором файла (например, в MPI_FILE_OPEN или MPI_FILE_DELETE), первый аргумент для обработчика - MPI_FILE_NULL.
Обработка ошибок ввода-вывода отличается от обработки ошибок связи и в другом важном аспекте. По умолчанию, стандартный обработчик ошибок для файловых дескрипторв - MPI_ERRORS_RETURN. Стандартный обработчик преследует две цели: когда создается новый дескриптор (при помощи MPI_FILE_OPEN), для него устанавливается стандартный обработчик ошибок, а процедуры ввода-вывода, не имеющие правильного дескриптора файла, для которого можно сгенерировать ошибку (таких, например, как MPI_FILE_OPEN или MPI_FILE_DELETE), используют обработчик по умолчанию. Обработчик по умолчанию может быть изменен использованием MPI_FILE_NULL в качестве аргумента fh для MPI_FILE_SET_ERRHANDLER. Текущее значение обработчика по умолчанию может быть определено вызовом MPI_FILE_GET_ERRHANDLER с параметром fh, установленным в MPI_FILE_NULL.
Объяснение: Для функций связи обработчик ошибок по умолчанию наследуется
из
MPI_COMM_WORLD. Для ввода-вывода не существует аналогичного
``корневого'' дескриптора, из которого можно унаследовать его свойства. Вместо
того, чтобы
``изобретать'' глобальный дескриптор файла, обычный обработчик работает так, как
если
бы он был присоединен к MPI_FILE_NULL.