next up previous contents
Next: Операции, которые пересылают данные Up: Расширенные коллективные операции Previous: Расширенные коллективные операции   Contents

Коллективные операции с интеркоммуникаторами

В стандарте MPI-1 (раздел 4.2) коллективные операции применимы только к интракоммуникаторам; однако, большинство коллективные операций MPI может быть обобщено и для интеркоммуникаторов. Чтобы понять, как MPI может быть расширен, мы можем рассматривать большинство коллективных операций MPI с интракоммуникаторами, как подпадающие под одну из следующих категорий (смотри, например, [20]):

Многие-ко-многим (all-to-all)

Все процессы участвуют в вычислении результата. Все процессы получают результат.

Многие-к-одному (all-to-one)

Все процессы участвуют в вычислении результата. Один процесс получает результат.

Один-ко-многим (one-to-all)

Один процесс вычисляет результат. Все процессы получают результат.

Другие

Коллективные операции, которые не подпадают ни под одну из категорий выше.

Операция MPI_Barrier не вписывается в эту классификацию по той причине, что никаких данных не пересылается (только неявный факт создания барьера). Схема перемещения данных MPI_Scan под эту классификацию также не подпадает.

Расширение возможностей коллективной связи от интракоммуникаторов к интеркоммуникаторам наиболее удобно описывается в терминах левых и правых групп. Например, all-to-all операция MPI_Allgather может быть описана, как сбор данных от всех членов одной группы, результатом чего является появление данных во всех членах другой группы (см. рисунок 7.3). В качестве другого примера, one-to-all операция MPI_Bcast посылает данные от одного члена одной группы всем членам другой группы. Коллективные операции вычисления, такие как MPI_REDUCE_SCATTER, имеют похожую интерпретацию (см. рисунок 7.4). Для интракоммуникаторов эти две группы являются одинаковыми. Для интеркоммуникаторов эти две группы различаются. Для all-to-all операций каждая из них описывается в двух фазах, в связи с чем они имеют симметричую, полнодуплексную реализацию.

В MPI-2 следующие коллективные операции с интракоммуникаторами также применимы и к интеркоммуникаторам:

(MPI_ALLTOALLW - это новая функция, описанная в разделе 7.3.5.) Эти функции используют такие же списки аргументов, как и их двойники из MPI-1, кроме того, они работают с интракоммуникаторами как и ожидается. Следовательно, нет потребности в их новых языковых привязках на ФОРТРАНe или Си. Однако, в С++ привязки были ``ослаблены''; эти функции-члены классов были перемещены из класса MPI::Intercomm в класс MPI::Comm. Но, так как коллективные операции не имеют смысла в С++ функции MPI::Comm (так как она не является ни интеркоммуникатором, ни интракоммуникатором), эти функции являются чисто виртуальными. В реализации MPI-2 привязки, описанные в этой главе, заменяют соответствующие привязки в MPI-1.2.

\includegraphics[scale=0.6]{pic/7.3.eps}

Рисунок 7.3. Интеркоммуникатор allgather. В центре - нерегламентируемые семантикой данные для одного процесса. Показаны две фазы выполнения allgathers в обоих направлениях.



Alex Otwagin 2002-12-10