Jump to content

Оператор сокращения

В информатике оператор приведения [1] — это тип оператора , который обычно используется в параллельном программировании для сведения элементов массива к одному результату. Операторы редукции ассоциативны и часто (но не обязательно) коммутативны . [2] [3] [4] Сокращение наборов элементов является неотъемлемой частью таких моделей программирования, как Map Download , где оператор сокращения применяется ( сопоставляется ) ко всем элементам перед их сокращением. Другие параллельные алгоритмы используют операторы сокращения в качестве основных операций для решения более сложных задач. Многие операторы сокращения могут использоваться для широковещательной рассылки для распределения данных по всем процессорам.

Оператор сокращения может помочь разбить задачу на различные частичные задачи, вычисляя частичные результаты, которые можно использовать для получения окончательного результата. Это позволяет выполнять определенные последовательные операции параллельно и уменьшать количество шагов, необходимых для этих операций. Оператор сокращения сохраняет результат частичных задач в частной копии переменной. Эти частные копии затем в конце объединяются в общую копию.

Оператор является оператором редукции, если:

  • Он может свести массив к одному скалярному значению. [2]
  • Конечный результат должен быть получен из результатов созданных частичных задач. [2]

Этим двум требованиям удовлетворяют коммутативные и ассоциативные операторы, применяемые ко всем элементам массива.

Некоторыми операторами, удовлетворяющими этим требованиям, являются сложение, умножение и некоторые логические операторы (и, или и т. д.).

Оператор сокращения может применяться в постоянное время к входному набору из векторы с элементы каждый. Результат операция представляет собой комбинацию элементов и должен быть сохранен в указанном корневом процессоре в конце выполнения. Если результат должен быть доступен на каждом процессоре после завершения вычислений, его часто называют Allreduce. Оптимальный последовательный алгоритм сокращения с линейным временем может применять оператор последовательно спереди назад, всегда заменяя два вектора результатом операции, примененной ко всем его элементам, создавая таким образом экземпляр, в котором на один вектор меньше. Это требует шаги, пока только осталось. Последовательные алгоритмы не могут работать лучше, чем линейное время, но параллельные алгоритмы оставляют некоторое пространство для оптимизации.

Предположим, у нас есть массив . Сумма этого массива может быть вычислена последовательно путем последовательного сведения массива к одной сумме с помощью оператора «+». Начав суммирование с начала массива, получим:

Поскольку «+» одновременно коммутативен и ассоциативен, он является оператором редукции. Следовательно, это сокращение может выполняться параллельно с использованием нескольких ядер, где каждое ядро ​​вычисляет сумму подмножества массива, а оператор сокращения объединяет результаты. Использование сокращения двоичного дерева позволит 4 ядрам выполнять вычисления. , , , и . Тогда два ядра смогут вычислить и и, наконец, одно ядро ​​вычисляет . Таким образом, для вычисления суммы в общей сложности можно использовать 4 ядра. шаги вместо шаги, необходимые для серийной версии. Этот метод параллельного двоичного дерева вычисляет . Конечно, результат тот же, но только из-за ассоциативности оператора приведения. Коммутативность оператора сокращения была бы важна, если бы существовало главное ядро, распределяющее работу между несколькими процессорами, поскольку тогда результаты могли бы поступать обратно на главный процессор в любом порядке. Свойство коммутативности гарантирует, что результат будет одинаковым.

Беспримерный

[ редактировать ]

Умножение матриц является не оператором сокращения, поскольку операция не является коммутативной. Если бы процессам было разрешено возвращать результаты умножения матриц в любом порядке главному процессу, окончательный результат, который вычисляет главный процесс, скорее всего, будет неверным, если результаты придут не по порядку. Однако обратите внимание, что умножение матриц является ассоциативным, и поэтому результат будет правильным, если будет соблюден правильный порядок, как в методе сокращения двоичного дерева.

Алгоритмы

[ редактировать ]

Алгоритмы биномиального дерева

[ редактировать ]

Что касается параллельных алгоритмов, существуют две основные модели параллельных вычислений: параллельная машина произвольного доступа как расширение оперативной памяти с общей памятью между процессорами и объемный синхронный параллельный компьютер связь и синхронизацию , который учитывает . Обе модели имеют разные последствия для временной сложности , поэтому будут показаны два алгоритма.

PRAM-алгоритм

[ редактировать ]

Этот алгоритм представляет собой широко распространенный метод обработки входных данных, где это степень двойки. Обратная процедура часто используется для трансляции элементов. [5] [6] [7]

Визуализация алгоритма с p = 8, m = 1 и сложением в качестве оператора приведения
для к делать
для к делать параллельно
если тогда активен
если немного из устанавливается тогда
набор в неактивный
еще если

Бинарный оператор для векторов определяется поэлементно так, что . Далее алгоритм предполагает, что вначале для всех и представляет собой степень двойки и использует процессоры . На каждой итерации половина процессоров становится неактивной и не участвует в дальнейших вычислениях. На рисунке показана визуализация алгоритма, использующего сложение в качестве оператора. Вертикальные линии представляют собой процессоры, в которых происходят вычисления элементов в этой строке. Восемь входных элементов расположены внизу, и каждый шаг анимации соответствует одному параллельному шагу выполнения алгоритма. Активный процессор оценивает данный оператор на элементе в настоящее время он держится и где минимальный индекс, удовлетворяющий , так что становится неактивным процессором на текущем этапе. и не обязательно являются элементами входного набора поскольку поля перезаписываются и повторно используются для ранее вычисленных выражений. Для координации ролей процессоров на каждом этапе, не вызывая дополнительной связи между ними, используется тот факт, что процессоры индексируются числами из к используется. Каждый процессор смотрит на свой -th наименее значащий бит и решает, стать ли оператор неактивным или вычислить оператор для собственного элемента и элемента с индексом, в котором находится -й бит не установлен. Базовым коммуникационным шаблоном алгоритма является биномиальное дерево, отсюда и название алгоритма.

Только в конечном итоге хранит результат, поэтому является корневым процессором. Для операции Allreduce необходимо распространить результат, что можно сделать, добавив широковещательную рассылку из . Кроме того, число процессоров ограничено степенью двойки. Этого можно добиться, доведя количество процессоров до следующей степени двойки. Существуют также алгоритмы, более приспособленные для этого варианта использования. [8]

Анализ времени выполнения
[ редактировать ]

Основной цикл выполняется раз, время, необходимое для выполнения параллельной части, составляет поскольку блок обработки либо объединяет два вектора, либо становится неактивным. Таким образом, параллельное время для коляски . Стратегию обработки конфликтов чтения и записи можно выбрать как ограничительную, например, монопольное чтение и монопольную запись (EREW). Ускорение алгоритма и, следовательно эффективность , . Эффективность страдает, потому что половина активных процессоров становится неактивными после каждого шага, поэтому единицы активны в шаге .

Алгоритм распределенной памяти

[ редактировать ]

В отличие от алгоритма PRAM, в модели распределенной памяти память не распределяется между процессорами, и данные должны обмениваться явным образом между процессорами. Следовательно, обмен данными между модулями должен осуществляться явным образом, как показано в следующем алгоритме.

для к делать
для к делать параллельно
если тогда активен
если немного из устанавливается тогда
отправлять к
набор в неактивный
еще если
получать

Единственная разница между распределенным алгоритмом и версией PRAM заключается во включении явных коммуникационных примитивов, принцип работы остается прежним.

Анализ времени выполнения
[ редактировать ]

Связь между подразделениями приводит к некоторым накладным расходам. Простой анализ алгоритма использует модель BSP и учитывает время. необходимо инициировать общение и время, необходимое для отправки байта. Тогда результирующее время выполнения будет , как элементы вектора передаются на каждой итерации и имеют размер всего.

Конвейерный алгоритм

[ редактировать ]
Визуализация конвейерного алгоритма с p = 5, m = 4 и сложением в качестве оператора сокращения.

Для моделей с распределенной памятью может иметь смысл использовать конвейерную связь. Это особенно актуально, когда мал по сравнению с . Обычно линейные конвейеры разбивают данные или задачи на более мелкие части и обрабатывают их поэтапно. В отличие от алгоритмов биномиального дерева, конвейерный алгоритм использует тот факт, что векторы не являются неразделимыми, но оператор может быть вычислен для отдельных элементов: [9]

для к делать
для к делать параллельно
если
отправлять к
если
получать от

Важно отметить, что для работы алгоритма операции отправки и получения должны выполняться одновременно. Вектор результата сохраняется по адресу в конце. Соответствующая анимация показывает выполнение алгоритма на векторах размера четыре с пятью процессорами. Два шага анимации визуализируют один параллельный шаг выполнения.

Анализ времени выполнения

[ редактировать ]

Число шагов при параллельном выполнении равно , занимает шагов до тех пор, пока последний процессор не получит свой первый элемент и дополнительные пока все элементы не будут получены. Следовательно, время выполнения в BSP-модели равно , предполагая, что — общий размер вектора в байтах.

Хотя имеет фиксированное значение, можно логически сгруппировать элементы вектора и уменьшить . Например, экземпляр проблемы с векторами размера четыре можно решить, разделив векторы на первые два и последние два элемента, которые всегда передаются и вычисляются вместе. В этом случае на каждый шаг передается двойной объем, но количество шагов уменьшается примерно вдвое. Это означает, что параметр уменьшается вдвое, а общий размер байтов остается прежним. Время выполнения для этого подхода зависит от значения , который можно оптимизировать, если и известны. Это оптимально для , предполагая, что это приводит к меньшему который делит исходный.

Приложения

[ редактировать ]

Сокращение — одна из основных коллективных операций, реализованных в интерфейсе передачи сообщений , где важна производительность используемого алгоритма, которая постоянно оценивается для различных вариантов использования. [10] Операторы могут использоваться в качестве параметров для MPI_Reduce и MPI_Allreduce, с той разницей, что результат доступен на одном (корневом) процессоре или на всех. MapReduce в значительной степени полагается на эффективные алгоритмы сокращения при обработке больших наборов данных, даже в огромных кластерах. [11] [12]

Некоторые алгоритмы параллельной сортировки используют сокращения, чтобы иметь возможность обрабатывать очень большие наборы данных. [13]

См. также

[ редактировать ]
  1. ^ «Оговорка о сокращении» . www.dartmouth.edu . Дартмутский колледж. 23 марта 2009 года . Проверено 26 сентября 2016 г.
  2. Перейти обратно: Перейти обратно: а б с Солихин, Ян (2016). Основы параллельной многоядерной архитектуры . ЦРК Пресс. п. 75. ИСБН  978-1-4822-1118-4 .
  3. ^ Чандра, Рохит (2001). Параллельное программирование в OpenMP . Морган Кауфман. стр. 59–77 . ISBN  1558606718 .
  4. ^ Коул, Мюррей (2004). «Вытаскивание скелетов из чулана: прагматический манифест скелетного параллельного программирования» (PDF) . Параллельные вычисления . 30 (3): 393. doi : 10.1016/j.parco.2003.12.002 . hdl : 20.500.11820/8eb79d42-de83-4cfb-9faa-30d9ac3b3839 .
  5. ^ Бар-Ной, Амоц; Кипнис, Шломо (1994). «Рассылка нескольких сообщений в системах одновременной отправки и получения». Дискретная прикладная математика . 55 (2): 95–105. дои : 10.1016/0166-218x(94)90001-9 .
  6. ^ Сантос, Юнис Э. (2002). «Оптимальные и эффективные алгоритмы суммирования и суммирования префиксов на параллельных машинах». Журнал параллельных и распределенных вычислений . 62 (4): 517–543. дои : 10.1006/jpdc.2000.1698 .
  7. ^ Слейтер, П.; Кокейн, Э.; Хедетниеми, С. (1 ноября 1981 г.). «Распространение информации на деревьях». SIAM Journal по вычислительной технике . 10 (4): 692–701. дои : 10.1137/0210052 . ISSN   0097-5397 .
  8. ^ Рабенсейфнер, Рольф; Трефф, Йеспер Ларссон (19 сентября 2004 г.). «Более эффективные алгоритмы сокращения числа процессоров, не превосходящего степень двойки, в параллельных системах передачи сообщений». Последние достижения в области параллельных виртуальных машин и интерфейса передачи сообщений . Конспекты лекций по информатике. Том. 3241. Шпрингер, Берлин, Гейдельберг. стр. 36–46. дои : 10.1007/978-3-540-30218-6_13 . ISBN  9783540231639 .
  9. ^ Бар-Ной, А.; Кипнис, С. (1 сентября 1994 г.). «Проектирование алгоритмов вещания в почтовой модели для систем передачи сообщений». Теория математических систем . 27 (5): 431–452. CiteSeerX   10.1.1.54.2543 . дои : 10.1007/BF01184933 . ISSN   0025-5661 . S2CID   42798826 .
  10. ^ Пьешивац-Грбович, Елена; Ангскун, Тара; Босилка, Джордж; Фагг, Грэм Э.; Габриэль, Эдгар; Донгарра, Джек Дж. (1 июня 2007 г.). «Анализ производительности коллективных операций MPI». Кластерные вычисления . 10 (2): 127–143. CiteSeerX   10.1.1.80.3867 . дои : 10.1007/s10586-007-0012-0 . ISSN   1386-7857 . S2CID   2142998 .
  11. ^ Ламмель, Ральф (2008). «Модель программирования Google MapReduce — новый взгляд». Наука компьютерного программирования . 70 (1): 1–30. дои : 10.1016/j.scico.2007.07.001 .
  12. ^ Сенгер, Гермес; Хиль-Коста, Вероника; Арантес, Лусиана; Маркондес, Сезар АС; Марин, Маурисио; Сато, Лирия М.; да Силва, Фабрисио AB (10 июня 2016 г.). «Анализ стоимости и масштабируемости BSP для операций MapReduce». Параллелизм и вычисления: практика и опыт . 28 (8): 2503–2527. дои : 10.1002/cpe.3628 . hdl : 10533/147670 . ISSN   1532-0634 . S2CID   33645927 .
  13. ^ Астманн, Майкл; Бингманн, Тимо; Сандерс, Питер; Шульц, Кристиан (24 октября 2014 г.). «Практическая массово-параллельная сортировка». arXiv : 1410.6754 [ cs.DS ].
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 647aff270827e27cef8e76cdbcb0e867__1703769840
URL1:https://arc.ask3.ru/arc/aa/64/67/647aff270827e27cef8e76cdbcb0e867.html
Заголовок, (Title) документа по адресу, URL1:
Reduction operator - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)