Цель работы.
Изучение метода сортировки Батчера. Реализация сортировки Батчера на многоядерных архитектурах. Исследование алгоритмической сложности последовательной и параллельной реализаций сортировки.
Теоретическая часть.
Сортировка является одной из типовых проблем обработки данных, и обычно понимается как задача размещения элементов неупорядоченного набора, состоящего из значений в порядке монотонного убывания или возрастания .
Пусть дана последовательность целых чисел , где . Необходимо отсортировать данную последовательность по возрастанию. Для получения алгоритма сортировки, временная сложность которого меньше, чем необходимо выбирать для сравнения элементы, расположенные на каком-то шаге друг от друга, при этом шаг должен изменяться во время работы алгоритма. Эта идея была реализована в алгоритме сортировки Шелла, где шаг убывает. Однако проблема сортировки Шелла – невозможность одновременного выполнения сравнений и перестановок, что отсутствует в алгоритме Батчера. Приведём алгоритм сортировки Батчера:
Input: a[0..N-1], t, N = 2t
for p = 2t-1, 2t-2,..., 1 do
r = 0
d = p
for q = 2t-1, 2t-2,..., p do
for k = 0,..., N-d-1 do in parallel
if k&p = r then
if a[k] > a[k+d] then
swap(a[k], a[k+d])
end if
end if
end for
d = q – p
r = p
end for
end for
Output: a[0..N-1], a[i] < a[i+1]
Пример 1. Работы алгоритма сортировки Батчера.
p q r d
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
8 8 0 8
4 8 0 4
4 4 4 4
2 8 0 2
2 4 2 6
2 2 2 2
1 8 0 1
1 4 1 7
1 2 1 3
1 1 1 1
Результат
53 87 52 61 98 17 89 27 65 42 15 59 62 77 76 3
53 42 15 59 62 17 76 3 65 87 52 61 98 77 89 27
53 17 15 3 62 42 76 59 65 77 52 27 98 87 89 61
53 17 15 3 62 42 52 27 65 77 76 59 98 87 89 61
15 3 53 17 52 27 62 42 65 59 76 77 89 61 98 87
15 3 53 17 52 27 62 42 65 59 76 77 89 61 98 87
15 3 52 17 53 27 62 42 65 59 76 61 89 77 98 87
3 15 17 52 27 53 42 62 59 65 61 76 77 89 87 98
3 15 17 52 27 53 42 62 59 65 61 76 77 89 87 98
3 15 17 42 27 53 52 61 59 65 62 76 77 89 87 98
3 15 17 27 42 52 53 59 61 62 65 76 77 87 89 98
Практическая часть.
1. Реализовать алгоритм сортировки Батчера для одноядерной архитектуры,
2. Реализовать алгоритм сортировки Батчера для многоядерной архитектуры в соответствии с заданием,
3. Оценить арифметическую сложность последовательной и параллельной реализаций метода,
4. Посчитать теоретическое и практическое ускорение параллельной программы,
5. Разработать и провести полную систему тестов сортировки массива в соответствии с заданием.
Варианты заданий.
1. Сортировка массива с количеством элементов на количестве ядер кратных двум,
2. Сортировка массива с количеством элементов на количестве ядер не кратных двум,
3. Сортировка массива с количеством элементов на количестве ядер кратных двум,
4. Сортировка массива с количеством элементов на количестве ядер не кратных двум,
5. Сортировка массива с произвольным количеством элементов на произвольном количестве ядер.