В.Д. Корнеев - Параллельное программирование в MPI (1162616), страница 21
Текст из файла (страница 21)
Замечание. Запрет доступа для чтения посылаюшегося буфера, даже если посылающее ~ействие, как предполагается, не изменяет содержание этого буфера, может казаться 'юлее строгим, чем необходимо, но дополнительное ограничение дает небольшую потерю дункциональных возможностей и допускает лучшее выполнение на некоторых системах. Ь7.3. Функции завершения неблокнрованных операций 1тобы закончить неблокированные посылку и получение данных, используются завершадшие функции МР1 МА1Т и МР1 ТЕЯТ. Завершение посылающего процесса указывает, что он ИР1 1ЯЕМР(ЬиХ, 1И ЬиХ 1И соиис 1И басасуре 1И зевс 1И саЕ 1И сошш 00Т гее(иенс МР1 1КЕСЧ(ЬиТ, 0УТ Ьи1 1И соипс 1М басасуре 1М воигсе 1М саЕ 0УТ гее)иенс соиис, басаьуре, е)евс, саЕ, сошш, гее)иенс) апрес посылаемого буфера количество элементов в посылаемом буфере тип элементов в передаваемом буфере номер принимаюшего процессора тег передаваемых данных имя коммуникатора связи (сошиипдсасог) имя (заголовка) запроса соипс, оасасуре, зоигсе, саЕ, сошш, гее)иевп) элрес буфера приема данных максимальное количество принимаемых элементов тип принимаемых элеиентов номер перепавшего процесса тег сообшення имя коммуникатора связи (сопшиидсасог) имя (заголовка) запроса 5.
Рогпзйо-Рот«вэоилодеаотвив 74 теперь свободен к доступу посылающегося буй ера. Завершение получающего процесса ука«ывает, что буфер приема данных содержит сообщение, приемник свободен к его доступу и что объект состояния урегулирован, мР1 МА1т(гес)иезг., зсасиз) 1МОУТ гес)иенс иня запроса ОПТ знавца статус объекта (по МР1 Майк(МР1 Кес(цезс вгес)цезс, МР1 Ясавиз взсаьцз) ЧР1 «4А1Т(КЕЦ«)ЕБТ, БТАТОЯ, 1ЕККОК) 1МТЕСЕК КЕЦОЕЯТ, БТАТОБ(МР1 БТАТ«)Б Я1ЕЕ), 1ЕККОК Запрос к МРТ.МА1Т возвращает управление после того, как операция, идентифицированная тес)цент, выполнилась, т.е. это блокированная функция. Если объект системы, указанный тес)цезс, был первоначально создан неблокированными посылающей или получающей функциями, то этот объект освобождается функцией МР1 МА1Т и гес(цезс устанавливается в МР1НЕЦУЕЯТ Мс)ьс.. Статус объекта содержит информацию относительно выполненной зперации.
МР1 НА1Т имеет не местную семантику завершения. ЧР1 ТЕБТ(гес)цезс, 11аЕ, зсатцз) 1МООТ гес)цезс имя запроса 1«)Т 11аЕ сгце, если операция выполнилась, иначе Ха1зе ЛТ зсасцз статус объекта гпс МР1 Тезс(МР1 Кес)пенс вгес)цезг,, 1пс в11аЕ, МР1 Ясаьцз взсасцв) ЧР1 ТЕЯТ(НЕЦ(«ЕЯТ, РЕАЛ, ЯТАТУЯ, 1ЕККОК) '.001СА1 ГБАО 1МТЕОЕК КЕЦУЕЯТ, ЯТАТс)Я(МР1 БТАТУБ Я1ЕЕ), 1ЕКНОК Запрос к МР1 ТЕБТ возвращает 11аЕ = сгце, если операция, идентифицированная гейцезс, выполнилась. В этом случае статуе состояния содержит информацию относигельно законченной операции.
Если объект системы, указанный гечиезс, был первоначаль«о создан неблокированными посылающей или получающей функциями, то он освобождаетя функцией МР1 ТЕЯТ и тес)цезс устанавливается в МР1 КЕЦОЕЯТ Мс«(Л,. Запрос возвращает 11аЕ = Ха1зе, если операция не выполнилась. В этом случае значение статуса состояния «еопределено, т.е. зто неблокированная функция. МР1 ТЕЯТ имеет локальную семантику «авершени я. Для МР1 ЫА1Т и МР1 ТЕБТ информация относительно завершенной операции возвращает:я в статусе объекта.
Содержание статуса объекта для получающего действия испольсуется, как описано в и. 5.2.8. Содержание статуса объекта для посылающего действия не >пренелепо, за исключением того, что к этому запросу может применяться функция запроса 1Р1 ТЕБТ САМСЕ«.«.ЕР (п. 5.9). Использование МР1 ТЕБТ допускает альтернативные действия внутри однопроцессноо выполнения. В многоподпроцессной окружающей среде запрос к МР1 ЧА1Т должен блосировать только вызвавший ее подпроцесс, позволяя другим подпроцессам выполняться. 1Р1 ЫА1Т и МР1 ТЕЯТ определены так, чтобы МР1 ТЕЯТ возвратился успешно (с 11аЕ = сгце) сочно в том месте, где возвращается МР1 МА1Т. В этих случаях оба возвращают ту же самую «нформацию в статусе.
$.7.4. Примеры 4спользование неблокированных операций поясняется на примере (см. и. 9.3.4) того же :амого вычисления задачи Дирихле из предыдущих пунктов. б.7. Нвблокарованныв вваа.нодеоствая Следующий пример показывает многих произподителеи кодов с единственным потребн- ..елем. Последний в группе процесс потребляет сообщения, посланные другими процессами.
Хример 5.9. Много производителей с единственным потребителем используют неблоки- юванне связи. суребет всгисп сЬаг баса(МАХБ1ЕЕЗ, дпс басавдле, МР1 Кеоиевп гес), 'г Виттег, Виттег Ьитдег0, МР1 Бсасив впапив, 'в Каждая ветвь определяет количество компьютеров в системе и свой ранг в/ МР1 Сотт гапК(соппп, йгапК), МР1 Соппп едхе(соти, йвдхе), 'Ф Производители в/ дт(гапК ьв вдхе-1) С /в инициализация одного буфера в/ Ьитйег = (Виттег в)та11ос(едхеот(Видтег)), /в главный цикл в/ нЬд1е(1) ( /в производство файлов данных и возврат в количества байтов сохраненных в буфере в/ ргобисе(Ьиттег->баса, йЬиттег->басавдке), /в передача данных в/ МР1„Бепб(Ьиттег->баса, Ьиддег->басавдхе, МР1 СНАК, вдке-1, саБ, соппп), 'в гаиК = вдле-1, потребитель в/ е1ве ( /в инициализация одно~о буфера в/ Ьиттег = (Виттег в)та11ос(вдхеот(Виттег)в(вдие-1)); Бог(д О, д ~ вдве-1, д++) /в инициализация приема от ининого производителя в/ МР1 1гесч(ЬидтегЫ баса, МАХБ1ЕЕ, МР1 СНАК, д, саБ, соти, й(ЬидтегЫ гео)) /» Главный цикл в/ тот(д = О, , д = (д+1)%(вдхе-1)) ( МР1 Нади(й(ЬиттегЫ гео), йвсасив), /в Опрепеление количества реально принятых байт «/ МР1 Сеп соипп(йвпапив, МР1 СМАК, й(ЬиИегЫ бапавдке)); /* Буфер приена злементов данных в/ сопение(ЬиттегЫ баса, ЬиттегЫ басавдхе), /в инициализация нового приема в/ МР1 1гесч(ЬидтегЕдЛ баса, МАХБ1ЕЕ, МР1 СНАК, д, Пай, соти, й(ЬиттегЫ гео)), в.
Ро«ва«о-Роги«взвимоденствия Каждый производитель "крутится" в бесконечном цикле, где повторяет производство «диого сообщения и передает его. Потребитель обслуживает каждого производителя в цикле «принимает сообщения. Пример накладывает строгую циклическую дисциплину, так как потребитель получа.т одно сообщение от каждого производителя по очереди. В некоторых случаях предпо«тительно использовать дисциплину "Йгз«-соп«е-йгз1-зег««е«1". Это достигается, используя 1Р1 ТЕЯТ, вместо МР1 ЫА1Т, как показано ниже.
Заметьте, что МР1 может только предла"ать дисциплину "первый пришел — первый обслужился", так как сообщения не обязательно «ребывают в том порядке, в каком они были посланы. Пример 5.10. Модифицированный многократный производитель с единственным потре- )ителем, использующий проверочные вызовы. суре«)е1 зсгпсс ( сЬаг папа(МАХЯ12Е]; тпс ««асаз1ве; МР1 Не«)пенс ге«); ) Вптгег; Впггег Ьц11егП; МР1 Ясаспз зсаспз; «* Каждая ветвь опрепеляет количество компьютеров в системе и свой ранг в/ МР1 Сошш гапк(сошш, йгапк); МР1 Сошш зйзе(сопш«, йзйзе); «в Производитель в/ 11(гап«« ~= згке-1) ( Ьпттег = (Впттег *)ша11ос(з1кеот(Впгтег))„ /* Главный цикл в/ нкап.1е(1) ( ргоопсе(Ьп11ег->««ага, ФЬпттег->Оасаз1ве); МР1 Яепо(Ьп11ег->паса,Ьц11ег->оасаз1хе,МР1 СНАМ,з1ке-1,пай,сошш); 'в гапк == з1зе-1; потребитель в/ е1зе ( Ьпттег = (Впттег в)ша11ос(з«кеот"(Впт1ег)в(ззве-1)); аког(г = О; з < айке-1; 1++) МР1 1гес««(ЬиТХегЫ .Овса, МАХЯ1ЕЕ, МР1 СНАП, 1, саЕ, сошш, йЬпттег(1],гей); = О; нЬ«1е(1) /в главный цикл в/ 1 Хог(11аЕ = О, !11аЕ, 1 = (1+1)/(зйке-1)) /в проверка для завершения приема в/ МР1 Тезс(й(Ьп11егЫ ге«)), Ф11аЕ, Азсасиз); МР1 бес соппс(йзсаспз, МР1 СВАН, йЬп11ег(1].басаз1ке); сопение(Ьп11егЫ .Наса, Ьи11ег(1].«1асазтхе); МР1 1гес««(Ьп11егЫ .паса, МАХЯ1ХЕ, МР1 СНАН, 1, саЕ, сошш, йЬп11ег[1].гей); сли здесь нет сообщения, ожидаемого от производителя, потребляющий процесс переско«ит к предыдущему производителю.
Более зффективное приложение, не делающее много «роверочных вызовов, представлено в п. 5.8, б. Е Небеокированные взаинодебетвия 77 5.7.5. Запрос освобождения объектов Объект запроса освобождается автоматически успешным запросом к МР1 ИА1Т или МР1 ТЕБТ. Кроме того, объект запроса может быть явно освобожден следующей функцией. (Здесь объект — это пакет обмениваемых данных.) МР1 ЕЕЦОЕЯТ ГЕЕЕ(гециевс) 1МООТ гее)иенс имя запроса 1пс МР1 Кее(иевс аггее(МРХ нее)иенс егее)иенс) ИР1 ЕЕЦОЕБТ ГМЕЕ(ЕЕЦОЕЯТ, 1ЕВВОЕ) !МТЕОЕЕ ЕЕЦУЕЯТ, 1ЕЕИИ МР1 ЙЕЦОЕБТ ГВЕЕ регистрирует объект запроса для освобождения и устанавливает гее)иевС в МР1 ВЕЦОЕЯТ МО!.!..
Запускается закончить действующую связь, связанную с за просом. Запрос становится недоступным после того, как он освобожден, поскольку голова повторно установлена в МР1 ЕЕЦОЕЯТ МО!.!.. Однако объект запроса непосредственно не должен быть освобожденным немедленно. Если обмен, связанный с этим объектом, не завершен и объект запрашивается для его правильного завершения, то МР1 не будет освобождать объект до окончания его завершения. МР1ЕЕЦОЕБТ ГЕЕЕ не может использоваться для отмены действующей связи. Лля этой цели нужно использовать МР1 САМСЕ!., описанный в п.
5тк МР1 ЕЕЦОЕЯТ ГВЕЕ нужно использовать, когда логика программы такая, что при использовании неблокированных связей запрос к МР! ЫА1Т или МР1 ТЕБТ избыточен. Например, программа могла быть такой, что после посылающей команды генерируется ответ от приемника. Если ответ был успешно получен, то посылка выполнялась. Пример 5.11. Пример использования МР1 ЕЕЦОЕЯТ ГЕЕЕ. МР1 Сопи гапК(МР1 СОИМ НОВ!.О, йгапК), 11(гапК == 0) ( Хог(з = 1,1 < и, т++) ( МР1 1вепб(оипча1, 1, МР1 Г1ОАТ, 1, О, сопев, йгее)), МР1 Еес)иенс аггее(йгец), МР1 1гевч(тпча1, 1, МР1 ГЕОАТ, 1, О, соппп, йгес(), МР1 Иазс(йгее), йвсасив), п1ве ( тт(гапК == 1) ( МР1 1гевч(1пча1, 1, МР1 ГЕОАТ, О, О, соим, йгее(), мР! Макс(йгес), йвсасив), аког(тн1,з<п-1,т++) ( МР1 1вепе!(оисча1, 1, МР1 ГНАТ, О, О, сота, йгеЧ), МР1 Еее)иевс атее(йгее(), МР1 1гевч(1пча1, 1, МР1 ГЕОАТ, О, О, соти, йге~),), МР1 Ыазс(йгее), йвсасив), МР1 1вепе)(оипча1, 1, МР1 И.ОАТ, О, О, сопи. йгес!), МР1 Матс(йгее(, йвсасив), )алросы не должны быть освобождены явно, если связь не завершена.
Получающие запросы ~икогда не должны освобождаться без запроса к МР1 ЫА1Т или МР1 ТЕЯТ. Только такой 5. РоюКПо-Робей взоимодейотоия ~алрос может гарантировать, что неблокированная операция завершилась. Это объясняется з п. 5.7.6. Если встречается ошибка в течение связи после того, как объект запроса был зсвобожден, то код ошибки не может быть возвращен пользователю (код ошибки обычно зозвратился бы запросом к МР1 ТЕБТ или запросом к МР1 ЧА1Т).
Следовательно, такая пшибка будет трактоваться МР! как фатальная. $.7.6. Семантика неблокированных взаимодействий "емантика блокированной связи, определенная в п. 5.4, распространяется и на семантику пеблокированной связи. Порядок взаимодействий. Неблокированные операции связи выполняются согласно позядку выполнения запросов инициализации обменов. Требование не обгона п. 5.4 распро:траняется и на неблокированные операции, Пример 5.12. йр1 Оовв гапк(совы, йгапк); !г(гапк == 0) ( МР1 1зепб(а, 1, МР1 Г(.ОАТ, 1, О, совы, йг1); МР1 1зепб(Ь, 1, МР1 ГЬОАТ, 1, О, совы, йг2); п1зеп1(гапк == 1) ( МР1 1гесч(а, 1, МР! Р|ОАТ, О, О, совы, йг1); МР1 1гесч(Ь, 1, МР1 Р1ОАТ, О, О, соппп, йг2); 4Р1 Найс(йг2, йзсаспз); !Р1 Кайс(йг1, йзсаспз); Первая передача нулевого процесса согласуется с первым приемом первого процесса.