Коллективная операция
Коллективные операции являются строительными блоками шаблонов взаимодействия, которые часто используются в алгоритмах SPMD в контексте параллельного программирования . Следовательно, существует заинтересованность в эффективной реализации этих операций.
Реализация коллективных операций обеспечивается интерфейсом передачи сообщений. [1] (МПИ).
Определения
[ редактировать ]Во всех асимптотических функциях времени выполнения мы обозначаем задержку (или время запуска каждого сообщения, независимо от размера сообщения), стоимость связи за слово , количество процессоров и размер ввода на узел . В тех случаях, когда у нас есть начальные сообщения на более чем одном узле, мы предполагаем, что все локальные сообщения имеют одинаковый размер. Для обращения к отдельным процессорам мы используем .
Если у нас нет равного распределения, т.е. узла имеет сообщение размера , мы получаем верхнюю границу времени выполнения, установив .
модель распределенной памяти Предполагается . Концепции аналогичны модели общей памяти . Однако системы с общей памятью могут обеспечивать аппаратную поддержку некоторых операций, таких как, широковещательная рассылка ( § Broadcast ), что обеспечивает удобное одновременное чтение. например, [2] Таким образом, могут стать доступны новые алгоритмические возможности.
Транслировать
[ редактировать ]
Схема трансляции [3] используется для распределения данных от одного процессора ко всем процессорам, что часто необходимо в параллельных программах SPMD для распределения входных или глобальных значений. Трансляцию можно интерпретировать как обратную версию шаблона сокращения ( § Сокращение ). Изначально только root с сохраняет сообщение . Во время трансляции отправляется на остальные процессоры, так что в конечном итоге доступен для всех процессоров.
Поскольку реализация посредством последовательного цикла for с итерации становятся узким местом, подход «разделяй и властвуй» широко распространен . Одна из возможностей — использовать биномиальную древовидную структуру с требованием, чтобы должна быть степенью двойки. Когда блок обработки отвечает за отправку в обрабатывающие подразделения , он отправляет в блок обработки и делегирует ответственность за блоки обработки перед ним, в то время как его собственная ответственность сводится к .
Биномиальные деревья имеют проблемы с длинными сообщениями. . Приемный блок может распространять сообщение другим устройствам только после получения всего сообщения. При этом сеть связи не используется. конвейерная обработка бинарных деревьев , где Поэтому используется разбивается на массив пакеты размером . Затем пакеты передаются один за другим, что обеспечивает быстрое распространение данных в сети связи.
Конвейерная трансляция по сбалансированному двоичному дереву возможна в , тогда как для неконвейерного случая требуется расходы.
Уменьшать
[ редактировать ]
Шаблон сокращения [4] используется для сбора данных или частичных результатов от разных блоков обработки и объединения их в глобальный результат выбранным оператором. Данный процессоры, сообщения находится на процессоре изначально. Все агрегируются по и результат в конечном итоге сохраняется на . Оператор сокращения должен быть как минимум ассоциативным. Некоторые алгоритмы требуют коммутативного оператора с нейтральным элементом. Операторы любят , , являются общими.
Соображения по реализации аналогичны широковещанию ( § Broadcast ). Для конвейерной обработки двоичных деревьев сообщение должно быть представлено как вектор меньшего объекта для покомпонентного сокращения.
Конвейерное сокращение сбалансированного двоичного дерева возможно в .
Все-Уменьшить
[ редактировать ]
Шаблон полного сокращения [5] (также называемый allreduce) используется, если результат операции сокращения ( § Сокращение ) должен быть распространен на все процессоры. Данный процессоры, сообщения находится на процессоре изначально. Все агрегируются оператором и результат в конечном итоге сохраняется на всех . Аналог операции сокращения, оператор должно быть как минимум ассоциативным.
All-reduce можно интерпретировать как операцию сокращения с последующей трансляцией ( § Broadcast ). Для длинных сообщений подойдет соответствующая реализация, тогда как для коротких сообщений задержку можно уменьшить, используя топологию гиперкуба ( Hypercube (pattern communication) § All-Gather/All-Reduce ), если это степень двойки. All-reduce также можно реализовать с помощью алгоритма «бабочка» и добиться оптимальной задержки и пропускной способности. [6]
Полное сокращение возможно в , поскольку сокращение и трансляция возможны в с конвейеризацией на сбалансированных двоичных деревьях . All-reduce, реализованный с помощью алгоритма-бабочки, обеспечивает такое же асимптотическое время выполнения.
Префикс-Сумма/Сканирование
[ редактировать ]
Префикс-сумма или операция сканирования [7] используется для сбора данных или частичных результатов из различных блоков обработки и для вычисления оператором промежуточных результатов, которые сохраняются в этих блоках обработки. Ее можно рассматривать как обобщение операции сокращения ( § Редукция ). Данный процессоры, сообщения находится на процессоре . Оператор должен быть как минимум ассоциативным, тогда как некоторые алгоритмы требуют также коммутативного оператора и нейтрального элемента. Общие операторы: , и . В конечном итоге блок обработки сохраняет сумму префикса . В случае так называемой суммы эксклюзивного префикса блок обработки сохраняет сумму префикса . Некоторые алгоритмы требуют хранения общей суммы в каждом процессоре в дополнение к суммам префиксов.
Для коротких сообщений этого можно достичь с помощью топологии гиперкуба, если это степень двойки. Для длинных сообщений топология гиперкуба ( Гиперкуб (шаблон связи) § Сумма префиксов , Сумма префиксов § Распределенная память: алгоритм гиперкуба ) не подходит, поскольку все процессоры активны на каждом этапе и поэтому конвейерную обработку использовать нельзя. Топология двоичного дерева лучше подходит для произвольных и длинные сообщения ( сумма префиксов § Большие размеры сообщений: конвейерное двоичное дерево ).
Префикс-сумма в бинарном дереве может быть реализована с восходящей и нисходящей фазой. В восходящей фазе выполняется сокращение, а нисходящая фаза аналогична широковещательной передаче, где суммы префиксов вычисляются путем отправки разных данных левому и правому дочернему элементу. При таком подходе возможна конвейерная обработка, поскольку операции равны сокращению ( § Сокращение ) и широковещанию ( § Широковещательная рассылка ).
Конвейерная сумма префиксов в двоичном дереве возможна в .
Барьер
[ редактировать ]Барьер [8] как коллективная операция является обобщением концепции барьера , которую можно использовать в распределенных вычислениях. Когда процессор вызывает барьер, он ждет, пока все остальные процессоры также не вызовут барьер. Таким образом, барьер используется для достижения глобальной синхронизации в распределенных вычислениях.
Один из способов реализации барьера — вызвать all-reduce ( § All-Reduce ) с пустым/фиктивным операндом. Мы знаем, что время выполнения All-reduce . Использование фиктивного операнда уменьшает размер. к постоянному коэффициенту и приводит к времени выполнения .
Собирать
[ редактировать ]
Схема сбора информации [9] используется для хранения данных всех процессоров в одном процессоре. Данный процессоры, сообщения на процессорном блоке . Для фиксированного процессора , мы хотим сохранить сообщение на . Сбор можно рассматривать как операцию сокращения ( § Редукция ), в которой используется оператор конкатенации. Это работает благодаря тому, что конкатенация ассоциативна. Используя тот же алгоритм сокращения биномиального дерева, мы получаем время выполнения . Мы видим, что асимптотическое время выполнения аналогично асимптотическому времени выполнения сокращения , но с добавлением к слагаемому множителя p . Этот дополнительный фактор обусловлен тем, что размер сообщения увеличивается на каждом этапе по мере объединения сообщений. Сравните это, чтобы уменьшить размер сообщения, который является константой для таких операторов, как .
Всесобрать
[ редактировать ]
Схема всеобщего общения [9] используется для сбора данных со всех блоков обработки и хранения собранных данных на всех блоках обработки. Данный блоки обработки , сообщение изначально хранится на , мы хотим сохранить сообщение на каждом .
Это можно рассматривать по-разному. Первый представляет собой операцию полного сокращения ( § All-Reduce ) с конкатенацией в качестве оператора, точно так же, как сбор может быть представлен с помощью сокращения. Второй представляет собой операцию сбора, за которой следует широковещательная рассылка нового сообщения размером . При этом мы видим, что все собирается возможно.
Разброс
[ редактировать ]
Схема разброса сообщений [10] используется для распределения данных от одного процессора ко всем процессорам. Он отличается от широковещательной передачи тем, что не отправляет одно и то же сообщение всем процессорам. Вместо этого он разделяет сообщение и доставляет одну его часть каждому процессору.
Данный блоки обработки , фиксированный процессор который содержит сообщение . Мы хотим передать сообщение на . Применяются те же проблемы реализации, что и для сбора ( § Gather ). Это приводит к оптимальному времени работы в .
Все на все
[ редактировать ]Все на все [11] является наиболее общей моделью общения. Для , сообщение это сообщение, которое изначально хранится на узле и должен быть доставлен на узел . Мы можем выражать все примитивы связи, не использующие операторы, через все-всем. Например, трансляция сообщения из узла эмулируется установкой для и настройка пусто для .
Предполагая, что у нас есть полностью подключенная сеть, наилучшее время работы для всех-всех находится в . Это достигается за счет раунды прямого обмена сообщениями. Для степень 2, в раунде связи , узел обменивается сообщениями с узлом .
Если размер сообщения невелик и при передаче данных преобладает задержка, для распределения сообщений во времени можно использовать алгоритм гиперкуба. .

Обзор среды выполнения
[ редактировать ]Эта таблица [12] дает обзор наиболее известных асимптотических сред выполнения, предполагая, что у нас есть свободный выбор топологии сети.
Примерами топологий, которые нам нужны для оптимального времени выполнения, являются бинарное дерево , биномиальное дерево, гиперкуб .
На практике нам приходится приспосабливаться к доступным физическим топологиям, например, «стрекоза», «толстое дерево» , грид-сеть (ссылается и на другие топологии).
Дополнительная информация в разделе Топология сети .
Для каждой операции оптимальный алгоритм может зависеть от входных размеров. . Например, широковещательную рассылку коротких сообщений лучше всего реализовать с использованием биномиального дерева, тогда как для длинных сообщений оптимальной является конвейерная связь на сбалансированном двоичном дереве.
Сложности, указанные в таблице, зависят от задержки и стоимость связи за слово помимо количества процессоров и размер входного сообщения на узел . Столбцы # отправителей и # получателей представляют количество отправителей и получателей, участвующих в операции соответственно. В столбце # сообщений указано количество входных сообщений и поле «Вычисления?». Столбец указывает, выполняются ли какие-либо вычисления над сообщениями или сообщения просто доставляются без обработки. Сложность дает асимптотическую сложность оптимальной реализации во время выполнения при свободном выборе топологии.
Имя | # отправителей | # получателей | # сообщения | Расчеты? | Сложность |
---|---|---|---|---|---|
Транслировать | нет | ||||
Уменьшать | да | ||||
Все-уменьшить | да | ||||
Префиксная сумма | да | ||||
Барьер | нет | ||||
Собирать | нет | ||||
Всесобрать | нет | ||||
Разброс | нет | ||||
Все-Всем | нет | или |
Примечания
[ редактировать ]- ^ Коллективные операции интеркоммуникатора . Стандарт интерфейса передачи сообщений (MPI), глава 7.3.1. Отдел математики и информатики Аргоннской национальной лаборатории .
- ^ Сандерс, Мельхорн, Дитцфельбингер, Дементьев 2019, с. 395
- ^ Сандерс, Мельхорн, Дитцфельбингер, Дементьев 2019, стр. 396-401.
- ^ Сандерс, Мельхорн, Дитцфельбингер, Дементьев 2019, стр. 402-403.
- ^ Сандерс, Мельхорн, Дитцфельбингер, Дементьев 2019, стр. 403-404.
- ^ Юань, Синь (февраль 2009 г.). «Алгоритмы полного сокращения оптимальной пропускной способности для кластеров рабочих станций» (PDF) . Журнал параллельных и распределенных вычислений . 69 (2).
- ^ Сандерс, Мельхорн, Дитцфельбингер, Дементьев 2019, стр. 404-406.
- ^ Сандерс, Мельхорн, Дитцфельбингер, Дементьев 2019, с. 408
- ^ Перейти обратно: а б Сандерс, Мельхорн, Дитцфельбингер, Дементьев 2019, стр. 412-413.
- ^ Сандерс, Мельхорн, Дитцфельбингер, Дементьев 2019, с. 413
- ^ Сандерс, Мельхорн, Дитцфельбингер, Дементьев 2019, стр. 413-418.
- ^ Сандерс, Мельхорн, Дитцфельбингер, Дементьев 2019, с. 394
Ссылки
[ редактировать ]Сандерс, Питер ; Мельхорн, Курт ; Дитцфельбингер, Мартин; Дементьев, Роман (2019). Последовательные и параллельные алгоритмы и структуры данных — базовый набор инструментов . Springer Nature Switzerland AG. ISBN 978-3-030-25208-3 .