ВУЗ:
Составители:
Рубрика:
- 8 -
тивовес этому неблокирующие функции возвращают управление вызвав-
шей их программе немедленно, а выполнение операции продолжается в
фоновом режиме; за завершением операции надо проследить особо. Не-
блокирующие функции возвращают квитанции (‘requests’), которые ‘пога-
шаются’ при завершении; до погашения квитанции с переменными и мас-
сивами, которые были аргументами неблокирующей функции, ничего де-
лать нельзя.
• Локальные функции не инициируют пересылок данных между ветвями.
Локальными являются большинство информационных функций (т.к. копии
системных данных уже хранятся в каждой ветви). Функция передачи
MPI_Send и функция синхронизации MPI_Barrier не являются локальными,
поскольку производят пересылку. В то же время функция приема
MPI_Recv
(парная для
MPI_Send) является локальной: она всего лишь пассивно ждет
поступления данных, ничего не пытаясь сообщить другим ветвям.
• Коллективные функции должны быть вызваны всеми ветвями-абонентами
коммуникатора (о понятии коммуникатора см. ниже), передаваемого им
как аргумент. Несоблюдение этого правила приводит к ошибкам на стадии
выполнения программы (обычно к ‘повисанию’ программы).
В MPI продумано объединение ветвей в коллективы (это помогает надеж-
нее отличать сообщения друг от друга). Достигается это введением в функ-
ции MPI параметра типа ‘коммуникатор’, который можно рассматривать как
дескриптор (номер) коллектива (он ограничивает область действия данной
функции соответствующим коллективом). Коммуникатор коллектива, кото-
рый включает в себя все ветви приложения, создается
автоматически (при
выполнении функции
MPI_INIT) и называется MPI_COMM_WORLD; в дальней-
шем имеется возможность (функция
MPI_Comm_split) создавать новые комму-
никаторы. Имеют место включающий только самого себя как процесс комму-
никатор
MPI_COMM_SELF и (заведомо неверный) коммуникатор
MPI_COMM_NULL; в случае возможности (динамического) порождения новых
процессов ситуация сложнее (подробнее см. [3
÷
5]).
Наиболее простыми функциями коммуникаций являются функции ‘точка-
точка’, в таких взаимодействиях участвуют два процесса, причем один
процесс является отправителем сообщения, а другой - получателем.
Процесс-отправитель вызывает одну из процедур передачи данных и явно
указывает номер в коммуникаторе процесса-получателя, а процесс-
получатель должен вызвать одну из процедур приема с указанием
того же
коммуникатора (в некоторых случаях необязательно знать точный номер
процесса-отправителя в заданном коммуникаторе).
Все процедуры этой группы делятся на два класса: процедуры с блокиров-
кой (с синхронизацией) и процедуры без блокировки (асинхронные). Проце-
дуры обмена с блокировкой приостанавливают работу процесса до выполне-
ния определенного условия, а возврат из асинхронных
процедур происходит
немедленно после инициализации соответствующей коммуникационной опе-
тивовес этому неблокирующие функции возвращают управление вызвав- шей их программе немедленно, а выполнение операции продолжается в фоновом режиме; за завершением операции надо проследить особо. Не- блокирующие функции возвращают квитанции (‘requests’), которые ‘пога- шаются’ при завершении; до погашения квитанции с переменными и мас- сивами, которые были аргументами неблокирующей функции, ничего де- лать нельзя. • Локальные функции не инициируют пересылок данных между ветвями. Локальными являются большинство информационных функций (т.к. копии системных данных уже хранятся в каждой ветви). Функция передачи MPI_Send и функция синхронизации MPI_Barrier не являются локальными, поскольку производят пересылку. В то же время функция приема MPI_Recv (парная для MPI_Send) является локальной: она всего лишь пассивно ждет поступления данных, ничего не пытаясь сообщить другим ветвям. • Коллективные функции должны быть вызваны всеми ветвями-абонентами коммуникатора (о понятии коммуникатора см. ниже), передаваемого им как аргумент. Несоблюдение этого правила приводит к ошибкам на стадии выполнения программы (обычно к ‘повисанию’ программы). В MPI продумано объединение ветвей в коллективы (это помогает надеж- нее отличать сообщения друг от друга). Достигается это введением в функ- ции MPI параметра типа ‘коммуникатор’, который можно рассматривать как дескриптор (номер) коллектива (он ограничивает область действия данной функции соответствующим коллективом). Коммуникатор коллектива, кото- рый включает в себя все ветви приложения, создается автоматически (при выполнении функции MPI_INIT) и называется MPI_COMM_WORLD; в дальней- шем имеется возможность (функция MPI_Comm_split) создавать новые комму- никаторы. Имеют место включающий только самого себя как процесс комму- никатор MPI_COMM_SELF и (заведомо неверный) коммуникатор MPI_COMM_NULL; в случае возможности (динамического) порождения новых процессов ситуация сложнее (подробнее см. [3 ÷ 5]). Наиболее простыми функциями коммуникаций являются функции ‘точка- точка’, в таких взаимодействиях участвуют два процесса, причем один процесс является отправителем сообщения, а другой - получателем. Процесс-отправитель вызывает одну из процедур передачи данных и явно указывает номер в коммуникаторе процесса-получателя, а процесс- получатель должен вызвать одну из процедур приема с указанием того же коммуникатора (в некоторых случаях необязательно знать точный номер процесса-отправителя в заданном коммуникаторе). Все процедуры этой группы делятся на два класса: процедуры с блокиров- кой (с синхронизацией) и процедуры без блокировки (асинхронные). Проце- дуры обмена с блокировкой приостанавливают работу процесса до выполне- ния определенного условия, а возврат из асинхронных процедур происходит немедленно после инициализации соответствующей коммуникационной опе- -8-
Страницы
- « первая
- ‹ предыдущая
- …
- 6
- 7
- 8
- 9
- 10
- …
- следующая ›
- последняя »