Коллективная операция - Collective operation
Коллективные операции являются строительными блоками для шаблонов взаимодействия, которые часто используются в СПМД алгоритмы в параллельное программирование контекст. Следовательно, есть интерес к эффективной реализации этих операций.
Реализация коллективных операций обеспечивается Интерфейс передачи сообщений[1] (MPI).
Определения
Во всех асимптотических функциях выполнения мы обозначаем задержку , стоимость связи за слово , количество процессоров и размер ввода на узел . В случаях, когда у нас есть начальные сообщения более чем на одном узле, мы предполагаем, что все локальные сообщения имеют одинаковый размер. Для обращения к отдельным процессорам мы используем .
Если у нас нет равного распределения, т.е. узел имеет сообщение размера , мы получаем верхнюю границу времени выполнения, задав .
А модель распределенной памяти предполагается. Концепции аналогичны для модель общей памяти. Однако системы с общей памятью могут обеспечивать аппаратную поддержку некоторых операций, таких как трансляция (§ Транслировать ), например, что позволяет удобное одновременное чтение.[2] Таким образом, могут стать доступными новые алгоритмические возможности.
Транслировать [3]
Шаблон широковещательной передачи используется для распределения данных от одного процессора ко всем модулям обработки, что часто требуется в СПМД параллельные программы для распределения входных или глобальных значений. Широковещательную рассылку можно интерпретировать как инверсную версию шаблона сокращения (§ Уменьшать ). Изначально только root с хранит сообщение . Во время трансляции отправляется в оставшиеся блоки обработки, так что в конечном итоге доступен для всех процессоров.
Поскольку реализация с помощью последовательного цикла for с итерации становятся узким местом, подходы разделяй и властвуй общие. Одна из возможностей - использовать структуру биномиального дерева с требованием, чтобы должно быть степенью двойки. Когда блок обработки отвечает за отправку к процессорам , он отправляет к блоку обработки и делегирует ответственность за блоки обработки к нему, в то время как его собственная ответственность сокращается до .
У биномиальных деревьев есть проблема с длинными сообщениями . Приемный блок может передавать сообщение другим устройствам только после получения всего сообщения. Между тем, сеть связи не используется. Поэтому конвейерная обработка бинарные деревья используется, где разбивается на массив пакеты размером . Пакеты затем транслируются один за другим, так что данные быстро распределяются в сети связи.
Конвейерная трансляция на сбалансированной двоичное дерево возможно в .
Уменьшать [4]
Шаблон сокращения используется для сбора данных или частичных результатов от разных блоков обработки и объединения их в глобальный результат выбранным оператором. Редукцию можно рассматривать как обратную версию трансляции (§ Транслировать ). Данный блоки обработки, сообщение находится на блоке обработки первоначально. Все объединены и результат в конечном итоге сохраняется на . Оператор редукции должен быть как минимум ассоциативным. Для некоторых алгоритмов требуется коммутативный оператор с нейтральным элементом. Операторы любят , , общие.
Поскольку сокращение можно интерпретировать как инверсную широковещательную рассылку, применяются равные условия реализации (§ Транслировать ). Для конвейерной обработки бинарные деревья сообщение должно быть представлено как вектор меньшего объекта для покомпонентного сокращения.
Конвейерное сокращение на сбалансированном двоичное дерево возможно в .
Все-Уменьшить [5]
Шаблон all-reduce используется, если результат операции сокращения (§ Уменьшать ) должны быть распределены по всем процессорам. Данный блоки обработки, сообщение находится на блоке обработки первоначально. Все агрегируются оператором и результат в конечном итоге сохраняется на всех . Аналогично операции уменьшения оператор должен быть как минимум ассоциативным.
All-reduce можно интерпретировать как операцию сокращения с последующей трансляцией (§ Транслировать ). Для длинных сообщений подходит соответствующая реализация, тогда как для коротких сообщений задержка может быть уменьшена с помощью гиперкуб (Гиперкуб (модель общения) § Все-Собрать / Все-Уменьшить ) топология, если это степень двойки.
All-reduce возможно в , так как сокращение и трансляция возможны в с конвейером на балансировке бинарные деревья.
Префикс-сумма / сканирование [6]
Операция суммирования префикса или сканирования используется для сбора данных или частичных результатов от различных блоков обработки и для вычисления промежуточных результатов оператором, которые хранятся в этих блоках обработки. Его можно рассматривать как обобщение операции сокращения (§ Уменьшать ). Данный блоки обработки, сообщение находится на блоке обработки . Оператор должен быть как минимум ассоциативным, тогда как некоторые алгоритмы требуют также коммутативного оператора и нейтрального элемента. Общие операторы , и . В конечном итоге блок обработки хранит сумму префикса . В случае так называемой суммы исключающего префикса блок обработки хранит сумму префикса . Некоторые алгоритмы требуют хранить общую сумму на каждом блоке обработки в дополнение к суммам префиксов.
Для коротких сообщений это может быть достигнуто с помощью топологии гиперкуба, если это степень двойки. Для длинных сообщений гиперкуб (Гиперкуб (коммуникационный шаблон) § Сумма префикса, Сумма префикса § Распределенная память: алгоритм гиперкуба ) топология не подходит, поскольку все блоки обработки активны на каждом шаге, и поэтому конвейерная обработка не может использоваться. А двоичное дерево топология лучше подходит для произвольных и длинные сообщения (Сумма префикса § Большие размеры сообщений: конвейерное двоичное дерево ).
Префиксная сумма в двоичном дереве может быть реализована с восходящей и нисходящей фазой. В восходящей фазе выполняется сокращение, в то время как нисходящая фаза аналогична широковещательной рассылке, где суммы префиксов вычисляются путем отправки разных данных левому и правому потомкам. При таком подходе конвейерная обработка возможна, поскольку операции равны сокращению (§ Уменьшать ) и трансляции (§ Транслировать ).
Конвейерная сумма префиксов в двоичном дереве возможна в .
Барьер [7]
Барьер как коллективная операция является обобщением концепции барьер, которые можно использовать в распределенных вычислениях. Когда блок обработки вызывает барьер, он ждет, пока все остальные блоки обработки также не вызовут барьер. Таким образом, барьер используется для достижения глобальной синхронизации в распределенных вычислениях.
Один из способов реализовать барьер - вызвать all-reduce (§ Все-уменьшить ) с пустым / фиктивным операндом. Мы знаем, что время выполнения All-reduce . Использование фиктивного операнда уменьшает размер к постоянному коэффициенту и приводит к времени выполнения .
Собирать [8]
Шаблон обмена данными используется для хранения данных от всех блоков обработки на одном блоке обработки. Данный блоки обработки, сообщение на блоке обработки . Для фиксированного процессора , мы хотим сохранить сообщение на . Gather можно рассматривать как операцию сокращения (§ Уменьшать ), который использует оператор конкатенации. Это работает из-за того, что конкатенация ассоциативна. Используя тот же алгоритм сокращения биномиального дерева, мы получаем время выполнения . Мы видим, что асимптотическая среда выполнения аналогична асимптотической среде выполнения reduce , но с добавлением множителя p к члену . Этот дополнительный фактор связан с увеличением размера сообщения на каждом шаге по мере объединения сообщений. Сравните это, чтобы уменьшить размер сообщения, если размер сообщения является постоянным для таких операторов, как .
All-Gather [8]
Схема связи «все сборы» используется для сбора данных со всех блоков обработки и для хранения собранных данных на всех блоках обработки. Данный блоки обработки , сообщение первоначально хранится на , мы хотим сохранить сообщение на каждой .
Об этом можно думать по-разному. Первый - это операция полного сокращения (§ Все-уменьшить ) с конкатенацией в качестве оператора, точно так же, как сборку можно представить с помощью сокращения. Второй - это операция сбора, за которой следует трансляция нового сообщения размера . При этом мы видим, что все собираются в возможно.
Разброс [9]
Схема рассредоточенной связи используется для распределения данных от одного блока обработки ко всем блокам обработки. Он отличается от широковещательной рассылки тем, что не отправляет одно и то же сообщение всем процессорам. Вместо этого он разбивает сообщение и доставляет по одной его части каждому процессору.
Данный блоки обработки , фиксированный процессор что содержит сообщение . Мы хотим передать сообщение на . Те же проблемы реализации, что и для gather (§ Собирать ) подать заявление. Это приводит к оптимальному времени работы в .
Все для всех [10]
Все для всех - это наиболее общий шаблон общения. За , сообщение это сообщение, которое изначально хранится на узле и должен быть доставлен на узел . Мы можем выразить все примитивы связи, в которых не используются операторы, через все ко всем. Например, трансляция сообщения из узла эмулируется установкой за и установка пусто для .
Предполагая, что у нас есть полностью подключенная сеть, наилучшее время выполнения для всех-всех находится в . Это достигается за счет раунды прямого обмена сообщениями. За степень двойки, в раунде связи , узел обменивается сообщениями с узлом .
Если размер сообщения небольшой и при передаче данных преобладает задержка, можно использовать алгоритм гиперкуба для распределения сообщений во времени. .
Обзор среды выполнения [11]
Эта таблица дает обзор наиболее известных асимптотических сред выполнения при условии, что у нас есть свободный выбор топологии сети.
Примеры топологий, которые нам нужны для оптимального времени работы: двоичное дерево, биномиальное дерево, гиперкуб.
На практике мы должны адаптироваться к доступным физическим топологиям, например стрекоза жирное дерево, грид-сеть (также ссылается на другие топологии).
Больше информации в разделе Топология сети.
Для каждой операции оптимальный алгоритм может зависеть от размеров входных данных. . Например, широковещательную передачу для коротких сообщений лучше всего реализовать с использованием биномиального дерева, тогда как для длинных сообщений оптимальным является конвейерная связь по сбалансированному двоичному дереву.
Сложности, указанные в таблице, зависят от задержки. и стоимость связи за слово в дополнение к количеству процессоров и размер входного сообщения на узел . В # отправитель и # приемник столбцы представляют количество отправителей и получателей, которые участвуют в операции соответственно. В # Сообщения в столбце указано количество входных сообщений и Расчеты? столбец указывает, выполняются ли какие-либо вычисления для сообщений или сообщения просто доставляются без обработки. Сложность дает асимптотическую сложность выполнения оптимальной реализации при свободном выборе топологии.
Имя | # отправитель | # приемник | # Сообщения | Расчеты? | Сложность |
---|---|---|---|---|---|
Транслировать | нет | ||||
Уменьшать | да | ||||
Все-уменьшить | да | ||||
Сумма префикса | да | ||||
Барьер | нет | ||||
Собирать | нет | ||||
All-Gather | нет | ||||
Разброс | нет | ||||
Все для всех | нет | или же |
Примечания
- ^ Коллективные операции интеркоммуникатора. Стандарт интерфейса передачи сообщений (MPI), глава 7.3.1. Отделение математики и информатики, Аргоннская национальная лаборатория.
- ^ Сандерс, Мельхорн, Дицфельбингер, Дементьев 2019, стр. 395
- ^ Сандерс, Мельхорн, Дицфельбингер, Дементьев 2019, стр. 396-401
- ^ Сандерс, Мельхорн, Дицфельбингер, Дементьев, 2019, стр. 402-403.
- ^ Сандерс, Мельхорн, Дицфельбингер, Дементьев, 2019, стр. 403-404
- ^ Сандерс, Мельхорн, Дицфельбингер, Дементьев, 2019, стр. 404-406.
- ^ Сандерс, Мельхорн, Дицфельбингер, Дементьев 2019, стр. 408
- ^ а б Сандерс, Мельхорн, Дицфельбингер, Дементьев, 2019, стр. 412-413
- ^ Сандерс, Мельхорн, Дицфельбингер, Дементьев 2019, стр. 413
- ^ Сандерс, Мельхорн, Дицфельбингер, Дементьев, 2019, стр. 413-418.
- ^ Сандерс, Мельхорн, Дицфельбингер, Дементьев 2019, стр. 394
Рекомендации
Сандерс, Питер; Мельхорн, Курт; Дицфельбингер, Мартин; Дементьев, Роман (2019). Последовательные и параллельные алгоритмы и структуры данных - Basic Toolbox. Springer Nature Switzerland AG. ISBN 978-3-030-25208-3.