Параллельная схема
В общем виде, вычислительная схема обобщенного алгоритма быстрой сортировки выглядит следующим образом:
- Распределяем исходный набор данных между процессорами блоками одинакового размера (в случае, если количество элементов в исходном наборе не кратно числу процессоров вычислительной системы можно, например, на один из процессоров отправить блок меньшего размера);
- Выполняем сортировку блоков данных на каждом из процессоров вычислительной системы (для этого используем последовательный вариант алгоритма быстрой сортировки);
- Выбираем ведущие элементы.
Разбиваем исходный N – мерный гиперкуб (множество процессоров) на 2^i подгиперкубов (i – номер итерации; i = 0, 1, …, N-1). В каждом из образовавшихся подгиперкубов, в рамках одного из процессоров (например, с наименьшим номером), выбираем ведущий (средний) элемент и рассылаем его значение всем остальным процессорам подгиперкуба. Заметим, что на i-ой итерации, каждый из подгиперкубов будут образовывать процессоры, в битовых представлениях номеров которых различаются i-ые (слева) позиции;
- На каждом процессоре разделяем имеющийся блок данных на две части с использованием полученного ведущего элемента;
- Образуем пары процессоров, для которых битовое представление их номеров отличается только в позиции (i+1) (слева), и осуществляем взаимообмен данными между этими процессорами; в результате таких пересылок данных, на процессорах, для которых в битовом представлении номера бит позиции (i+1) равен 0, должны оказаться части блоков со значениями, не превышающими значения ведущего элемента; процессоры с номерами, в которых бит (i+1) равен 1, должны собрать, соответственно, все значения данных, превышающие значение ведущего элемента.
Взаимообмен организуем таким образом, что при его завершении на каждом из процессоров будет находиться упорядоченный набор элементов.
Выполнив шаги (3) – (5) N раз, получим отсортированный набор данных, разбитый на блоки, число которых равно числу процессоров. После этого, остается лишь собрать все блоки в один.
|