В.Д. Корнеев - Параллельное программирование в MPI (1162616), страница 42
Текст из файла (страница 42)
6,3. Инициализация и выход 0ппа из целей МР1 состоит в том, чтобы достичь переносимости исходного текста. Под зтям подразумевается, что программа, используя МР1 и выполняя код стандартного ззыка, перенасима в том виде, в котором написана, и не должна требовать никаких ~ изменений исходного текста, когда переносится с одной системы на другую. Это явно не зпворит ничего о том, как МР1 программа начата или запущена из командной строки, ни зго пользователь должен делать, чтобы установить окружающую среду, в которой МР1 программа выполнится. Однако выполнение может требовать, чтобы некоторая установка Мыла сделана прежде, чем другие функции МР1 будут названы.
Чтобы обеспечить это, МРХ ипючает функцию инициализации ИР1 1И1Т. %1„1ИХТ() ззп ИР1 1пХс(1пс »агцс, с)заг «««агязз) МР1„1И ХТ (ХЕРВОВ) 1МТЕОЕВ ХЕВИБ Эта функция должна быть вызвана перед любой другой функцией МР1, но не более здзого раза; последующие запросы к функции будут ошибочны (см. ИРХ ХИХТХА11ЕЕХз). Все МР1 программы должны содержать запрос к ИРХ ХКХТ; эта функция должна быть зызвана прежде, чем любая другая МР1 функция (кроме ИР1 ХИХТХА112ЕП). В версии для РМ81 С агйс и агбч обеспечиваются аргументами в иазп: 8. Управление онрузеанпаей средой 162 тпс вата(ьпс агбс, сиаг ««агйп) ( МР1 1птс(йагйс, кагбч), /« Разбор аргументов «/ /« Главная программа «/ МР1 Гйпа11зе(); ) /« Смотри ниже «/ МР1 Г1МА1.12Е() Апс МР1 Гйпа1гве(ио16) МР1 Г1МА1.12Е(1ЕВВОВ) 1МТЕСЕВ 1ЕВВОВ Эта функция освобождает (очищает) все МР! установки.
Если только она вызвана, то никакая МР1 функция (даже МР1 1М1Т) уже не может использоваться. В конце программы обязательно должна вызываться функция МР1 Г1МАЬ12Е. МР1 1М1Т1АЬ12ЕОИ1аЕ) СОТ Х1 Е Флаг равен пгпе, если МР1 1М1Т была вызвана, иначе йа1ве Апс МР1 1пйсАа11шей(йпс «11аЕ) МР1 1МТТ1АЬ12ЕО(ГЬАС, 1ЕВВОВ) ЫС1САЬ ГЬАС 1МТЕСЕВ 1ЕВВОВ Эта функция может использоваться, чтобы определить, была ли МР1 1М1Т вызвана, Это единственная функции, которая может быть вызвана прежде, чем функция МР1 1М1Т. МР1 АВОВТ(савв,еггогсойе) 1М савв Коммуникатор, црелназиачениый лля освобождения 1М еггогсойе Кол ошибки лля возврашения вызываемой окружавшей срелой Ьпс МР1 АЬогс(МР1 Савв савв, Апс еггогсойе) МР1 АВОВТ(СОММ, ЕВВОВСООЕ, 1ЕВВОВ) 1МТЕСЕВ СОММ, ЕВВОВСОРЕ, 1ЕВВОВ Эта функция прерывает все задачи в группе соппп.
Окружающая среда Бп!и ипа РО81Х должны обращаться с этим, как геспгп еггогсоое из главной программы ппп аЬогс(еггогсоое), Зля МР1 приложений требуется определить поведение МР1 АВОВТ, пю крайней мере, для сопап, равного МР1 СОММ МОВЬО, МР! приложения могут игнорировать аргумент сопап и действовать, как будто совв была МР1 СОММ МОВЬО.
Поведение функции МР1 АВОВТ(савв,еггогсоое) для савв иного, чем МР1 СОММ МОВЬЕ является зависимым от выполнения. Запрос к МР1 АВОВТ(МР1 СОИМ НОВЬО, еггогсоое) доз жен всегда заставлять все процессы в группе МР1 СОММ МОВЫ прерываться. МР1 приложения требуют, чтобы аргументы в С были аргументами к вайп. Аргументы командной строки обеспечиваются МР1 1пйс, чтобы МР1 приложения использовали их в инициализации окружающей среды МР1. Они передаются по ссылке, чтобы МР1 приложение обеспечило им окружающие среды, где аргументы командной строки не обеспечиваются в ва1п. 84.
Обработка ошибок 163 8.4. Обработка ошибок МР! обеспечивает пользователя безопасной передачей сообщений: посланное сообщение всегда получается правильно и пользователь не должен проверять ошибки в передаче, блокиэовке по времени или другие состояния неисправности. Однако если МР1 приложение построено на ненадежном основном механизме, создатели МР1 подсистемы должны оградить пользователя от возможных сбоев системы связи. Конечно, ошибки могут встречаться в МР1 запросах по ряду причин. Например, югда МР1 функция вызвана с неправильным аргументом (несуществующее назначение в посылающей функции, слишком маленький буфер в получающей функции и т.д.). Этот тип ошибки может быть в любом выполнении.
Кроме того, может встречаться ошибка, связанная с превышением программой доступного количества ресурсов системы (число отложенных сообщений, буферов систем и т. д.) и используемым механизмом распределения эесурсов, которое может отличиться от вычислительной системы. МР1 имеет возможность выбора обработки некоторых ошибок, которые встречаются в течение запросов МР1.
Могут встречаться ошибки, которые генерируют исключения или переполнения (типа ошибок, связанных с плавающей запятой или нарушений доступа), звляются слишком дорогими для обнаружения в способе стандартного исполнения или катастрофические ошибки, которые могут предотвращать возврат управления к вызывающему оператору. Другой тонкий момент возникает из-за природы асинхронной связи. МР1 может обрабатывать только ошибки, которые привязаны к определенному запросу МР1. МР! запросы (и блокированные и неблокированные) могут начать операции, которые продолжаются ккнхронно после возвращения управления. Таким образом, запрос может быть успешным, однако операция может позже закончиться с ошибкой. Если имеется последующий запрос, который касается той же самой операции (например, ожидание или проверочный запрос, который заканчивает неблокированную операцию, или получающая операция, которая заганчивает связь, начатую блокированной функцией), то ошибка может быть связана с этим жпросом.
В некоторых случаях ошибка может появиться после гого, как все запросы, которые касаются операции, закончили. (Предположим случай, когда выполняется блокированная посылающая операция по состоянию готовности, отбывающее (уходящее) сообщение 5уферизуется, Впоследствии обнаружено, что на приеме стоит несоответствующая получающая функция.) Такие ошибки не будут обработаны МР1. Ошибки в запросах МР1, которые обрабатываются системой, зависят от выполнения. Каждая такая ошибка генерирует МР1 исключение, т.е. прерывание МР1 выполнения.
Ошибки, которые не обрабатываются МР1, будут обработаны механизмами обработки ошиеак, связанными с конкретным языком или операционной системой. Как правило, ошибки, иаторьге не обрабатываются МР1, заставляют параллельную программу прерываться. Случай МР! исключения имеет два эффекта: ° Будет вызываться обработчик ошибок МР1.
° Если обработчик ошибок не вызвал процесс остановки, то подходящий код ошибки будет возвращен запросом МР1. Некоторые запросы МР1 могут вызывать больше одного МР1 исключения (см. и. 5.8). В таком случае МР1 обработчик ошибок будет вызываться один раз для каждого исключения и будут нозвращены коды многократных ошибок. После того, как ошибка обнаружена, состояние МР! неопределено, т.е.
состояние выюзсления после выполненного обработчика ошибки не обязательно допускает пользователя г продолжению МР! выполнения. Цель этих обработчиков ошибок состоит в том, чтобы пользователь выдал определяемые им же сообщения об ошибках и выполнял действия, не связанные с МР1 (типа, наполнения буфера ввода — вывода) перед выходами программы. МР! приложение свободно допускает, чтобы МР! выполнение продолжилось после ошибки, но не требует, чтобы так делалось. 164 8. Управление окруэсающей средой 8.4.1. Обработчики ошибок Пользователь может связывать обработчик ошибок с переключателем каналов.
Определенная функция обработки ошибок будет использоваться для любого МР! исключения, которое встретится в течение запроса к МР1 при взаимодействиях с этим переключателем каналов, МР1 запросы, которые не связаны с каким-либо переключателем каналов, будут присоединены к переключателю каналов МР1 СОИМ ИОВЬП. Прикрепление обработчиков ошибок на переключатели каналов совершенно локально: различные процессы могут присоединить различные обработчики ошибок на переключатели каналов для той же самой области связи. Вновь созданный переключатель каналов наследует обработчик ошибок, который связан с родительским переключателем каналов.
В частности, пользователь может определять глобальный обработчик ошибок для всех переключателей каналов, связывая его с переключателем каналов МР1 СОММ НОВЫ немедленно после инициализации. В МР1 доступны несколько предопределенных обработчиков ошибок: МР1 ЕВВОВБ АВЕ ГАТАŠ— вызванный обработчик заставляет программу прерываться яа всех процессах выполнения. Это имеет тот же эффект, как будто МР1 АВОВТ быя вызван этим процессом с аргументом переключателя каналов МР1 СОММ НОВЕР. МР1 ЕВВОВЯ ВЕТОК вЂ” обработчик не делает никаких действий, кроме возвращения кода ошибки пользователю.
Приложения могут обеспечивать дополнительные предопределенные обработчики ошибок, т.е. программисты имеют возможность закодировать их собственные обработчика ошибок. Обработчик ошибок МР1 ЕВВОВЯ АВЕ ГАТАЕ связан по умолчанию с МР1 СОНМ ИОВЕО после инициализации. Он используется, если пользователь решает, что не нужно управлять обработкой каждой ошибки и каждая ошибка трактуется как фатальная. Так как (почти) все запросы МР1 возвращают код ошибок, пользователь может выбирать, обратиться ялк нет с кодом ошибок к выполнению подходящего кода восстановления, когда запрос не быа успешным. В этом случае будет использоваться обработчик ошибок МР1 ЕВВОВЯЯЕТбйй.
Обычно это более удобно и более эффективно, чтобы не проверять ошибки после каждого запроса МР! и обрабатывать такую ошибку нетривиальным МР1 обработчиком ошибок. МР1 обработчик ошибок — это непрозрачный объект, используется только его заголовок. МР1 функции обеспечивают создание новых обработчиков ошибок, связывают обработчики ошибок с переключателями каналов и проверяют, какой обработчик ошибок связан с переключателем каналов. МР1 ЕВВНАИОЕЕВ СВЕАТЕ(1ипсскоп, егг)ьапо1ег) 1Н Тцпсьаоп Заголовок процедуры, определения ошибки пользователя СОТ еггпап41ег Обработчик ошибки МР1 Апс МР1 ЕггЬапб1ег сгеасе(МР1 Напб1ег 1цпссйоп е1ипссйоп, МР1 ЕггЬапо1ег ееггнапо1ег) МР1 ЕВВНАХРЕЕВ СВЕАТЕ(ГОИСТ1ОМ, НАНОЕЕВ, 1ЕВВОВ) ЕХТЕВИА!.