ВУЗ:
Составители:
Рубрика:
- 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]).
Наиболее простыми функциями коммуникаций являются функции ‘точка-
точка’, в таких взаимодействиях участвуют два процесса, причем один
процесс является отправителем сообщения, а другой - получателем.
Процесс-отправитель вызывает одну из процедур передачи данных и явно
указывает номер в коммуникаторе процесса-получателя, а процесс-
получатель должен вызвать одну из процедур приема с указанием
того же
коммуникатора (в некоторых случаях необязательно знать точный номер
процесса-отправителя в заданном коммуникаторе).
Все процедуры этой группы делятся на два класса: процедуры с блокиров-
кой (с синхронизацией) и процедуры без блокировки (асинхронные). Проце-
дуры обмена с блокировкой приостанавливают работу процесса до выполне-
ния определенного условия, а возврат из асинхронных
процедур происходит
немедленно после инициализации соответствующей коммуникационной опе-
рации. Неаккуратное использование процедур с блокировкой может привести
-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]). Наиболее простыми функциями коммуникаций являются функции ‘точка- точка’, в таких взаимодействиях участвуют два процесса, причем один процесс является отправителем сообщения, а другой - получателем. Процесс-отправитель вызывает одну из процедур передачи данных и явно указывает номер в коммуникаторе процесса-получателя, а процесс- получатель должен вызвать одну из процедур приема с указанием того же коммуникатора (в некоторых случаях необязательно знать точный номер процесса-отправителя в заданном коммуникаторе). Все процедуры этой группы делятся на два класса: процедуры с блокиров- кой (с синхронизацией) и процедуры без блокировки (асинхронные). Проце- дуры обмена с блокировкой приостанавливают работу процесса до выполне- ния определенного условия, а возврат из асинхронных процедур происходит немедленно после инициализации соответствующей коммуникационной опе- рации. Неаккуратное использование процедур с блокировкой может привести
Страницы
- « первая
- ‹ предыдущая
- …
- 6
- 7
- 8
- 9
- 10
- …
- следующая ›
- последняя »