Интерфейс C++ для MPI включает в себя стандартный обработчик
ошибок
[]MPI::ERRORS_THROW_EXCEPTIONS
для использования с функциями-членами Set_errhandler().
MPI::ERRORS_THROW_EXCEPTIONS может быть установлен или получен только
функциями С++. Если программа, написанная на другом языке при выполнении
вызывает ошибку, вызывающую обработчик ошибок MPI::ERRORS_THROW_EXCEPTIONS, исключение будет передано выше через стек
вызова, пока код С++ его не перехватит. Если такого кода нет, поведение не
определено. В многопоточных средах, или в случае возникновения ошибки в
неблокирующей функции MPI во время ее фонового выполнения, поведение
зависит от реализации.
Обработчик ошибок MPI::ERRORS_THROW_EXCEPTIONS заставляет программу
инициировать
MPI::Exception для любого кода возврата MPI
кроме MPI::SUCCESS. Внешний интрефейс для класса MPI::Exception
определен следующим образом:
namespace MPI {
class Exception {
public:
Exception(int error_code);
int Get_error_code() const;
int Get_error_class() const;
const char *Get_error_string() const;
};
};
Совет разработчикам: Исключение будет сгенерировано внутри тела
функции
MPI::ERRORS_THROW_EXCEPTIONS. Предполагается, что после генерации
исключения управление будет возвращено пользователю. Некоторые функции MPI
определяют в параметрах некоторую возвращаемую информацию в случае возникновения
ошибки при определенном MPI_ERRORS_RETURN. Тот же тип возвращаемой
информации должен определен и для возникших исключений.
Например, MPI_WAITALL помещает код ошибки каждого запроса в
соответствующее место статусного массива и возвращает код ошибки MPI_ERR_IN_STATUS. При использовании MPI::ERRORS_THROW_EXCEPTIONS
предполагается что перед генерацией исключения в массиве статуса будут
установлены соответствующим образом коды ошибок. []