Опубликован: 28.07.2007 | Доступ: свободный | Студентов: 2030 / 506 | Оценка: 4.53 / 4.26 | Длительность: 25:10:00
ISBN: 978-5-9556-0096-3
Специальности: Программист
Лекция 9:

Параллельные методы сортировки

9.6. Краткий обзор лекции

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

Алгоритм пузырьковой сортировки (подраздел 9.3) в исходном виде практически не поддается распараллеливанию в силу последовательного выполнения основных итераций метода. Для введения необходимого параллелизма рассматривается обобщенный вариант алгоритма – метод чет-нечетной перестановки. Суть обобщения состоит в том, что в алгоритм сортировки вводятся два разных правила выполнения итераций метода в зависимости от четности номера итерации сортировки. Сравнения пар значений упорядочиваемого набора данных на итерациях метода чет-нечетной перестановки являются независимыми и могут быть выполнены параллельно.

Для алгоритма Шелла (подраздел 9.4) рассматривается схема распараллеливания при представлении топологии сети в виде гиперкуба. При таком представлении топологии оказывается возможной организация взаимодействия процессоров, расположенных далеко друг от друга при линейной нумерации. Как правило, такая организация вычислений позволяет уменьшить количество выполняемых итераций алгоритма сортировки.

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

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

9.7. Обзор литературы

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

Параллельные варианты алгоритма пузырьковой сортировки и сортировки Шелла рассматриваются в [ [ 51 ] ].

Схемы распараллеливания быстрой сортировки при представлении топологии сети передачи данных в виде гиперкуба описаны в [ [ 51 ] , [ 63 ] ]. Сортировка с использованием регулярного набора образцов представлена в работе [ [ 63 ] ].

Полезной при рассмотрении вопросов параллельных вычислений для сортировки данных может оказаться работа [ [ 17 ] ].

9.8. Контрольные вопросы

  1. В чем состоит постановка задачи сортировки данных?
  2. Приведите несколько примеров алгоритмов сортировки. Какова вычислительная сложность приведенных алгоритмов?
  3. Какая операция является базовой для задачи сортировки данных?
  4. В чем суть параллельного обобщения базовой операции задачи сортировки данных?
  5. Что представляет собой алгоритм чет-нечетной перестановки?
  6. В чем состоит параллельный вариант алгоритма Шелла? Каковы основные отличия этого параллельного алгоритма сортировки от метода чет-нечетной перестановки?
  7. Что представляет собой параллельный вариант алгоритма быстрой сортировки?
  8. Что зависит от правильного выбора ведущего элемента для параллельного алгоритма быстрой сортировки?
  9. Какие способы выбора ведущего элемента могут быть предложены?
  10. Для каких топологий могут применяться рассмотренные алгоритмы сортировки?
  11. В чем состоит алгоритм сортировки с использованием регулярного набора образцов?

9.9. Задачи и упражнения

  1. Выполните реализацию параллельного алгоритма пузырьковой сортировки. Проведите эксперименты. Постройте теоретические оценки с учетом тех операций пересылок данных, которые использовались при реализации, и параметров вычислительной системы. Сравните получаемые теоретические оценки с результатами экспериментов.
  2. Выполните реализацию параллельного алгоритма быстрой сортировки по одной из приведенных схем. Определите значения параметров латентности, пропускной способности и времени выполнения базовой операции для используемой вычислительной системы и получите оценки показателей ускорения и эффективности для реализованного метода параллельных вычислений.
  3. Разработайте параллельную схему вычислений для широко известного алгоритма сортировки слиянием (подробное описание метода может быть получено, например, в работах [ [ 26 ] ] или [ [ 50 ] ]). Выполните реализацию разработанного алгоритма и постройте все необходимые теоретические оценки сложности метода.