Сети сортировки: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Строка 25: Строка 25:
 
Массив <math>B</math> упорядочен, если выполняются следующие соотношения<nowiki>:</nowiki>
 
Массив <math>B</math> упорядочен, если выполняются следующие соотношения<nowiki>:</nowiki>
  
<math>B_i^k<=B_i^j</math> , для любых <math>i</math>, при <math>k<j</math>,
+
<math>B_i^k\le B_i^j</math> , для любых <math>i</math>, при <math>k<j</math>,
  
<math>B_i^k<=B_l^j</math> , для любых <math>k,j</math>, при <math>i<l</math>.
+
<math>B_i^k\le B_l^j</math> , для любых <math>k,j</math>, при <math>i<l</math>.
  
 
=== Вычислительное ядро алгоритма ===
 
=== Вычислительное ядро алгоритма ===

Версия 23:44, 23 февраля 2015

Содержание

1 Описание свойств и структуры алгоритма

1.1 Словесное описание алгоритма

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

К первым следует отнести сеть сортировки простой вставкой, сеть четно-нечетной перестановки, сеть четно-нечетного слияния Бетчера и сеть битонной сортировки. К немасштабируемым следует отнести ряд оптимальных, с точки зрения времени выполнения сортировки, сетей для 6, 9, 10, 12 и 16 процессоров [1].

1.2 Математическое описание

Исходные данные: одномерный массив [math]n[/math] чисел.

Вычисляемые данные: упорядоченный массив.

Постановка задачи. Сортировкой, или упорядочиванием элементов, называется процесс их расположения согласно определенному линейному отношению порядка, такому как отношение «меньше или равно» для чисел. Можно указать три больших класса последовательных алгоритмов сортировки, отличающихся оценкой сложности (видом зависимости числа выполняемых операций от размера массива). Алгоритмы сортировки, основанные на сравнении элементов, имеют сложность порядка [math]O(n^2)[/math] операций, где [math]n[/math] – число сортируемых элементов, что неприемлемо при больших значениях n, либо [math]O(n log_2(n))[/math] операций. Эти методы отличаются универсальностью. Последние из них взяты за основу «наилучшего» последовательного алгоритма сортировки. Известны методы поразрядной сортировки, обеспечивающие выполнение сортировки за [math]O(nk)[/math] операций, где [math]k[/math] – разрядность сортируемых данных, но их реализация существенно зависит от типа сортируемых данных, в связи с чем далее они не рассматриваются.

Для упрощения изложения далее рассматривается задача расположения в порядке неубывания [math]n[/math] элементов массива целых [math]32[/math]-разрядных чисел. Если не оговорено иное, будем считать, что сортировка выполняется на вычислительной системе с распределенной памятью. Данное предположение, благодаря потенциальной возможности обработки произвольно большого набора данных, существенно расширяет область применимости рассматриваемых методов.

Уточним, что будет пониматься под упорядоченным массивом. Будем предполагать, что исходный массив [math]A[/math] распределен по процессорам некоторыми порциями [math]A_i[/math], где [math]i[/math] – номер процессора, [math]A=\bigcup\limits_{i} A_i[/math]. По окончании сортировки элементы исходного массива распределены по процессорам некоторыми порциями [math]B_i[/math], [math]B=\bigcup\limits_{i} B_i[/math], каждая из которых упорядочена. Потребуем, чтобы размеры всех порций были одинаковы: [math]|A_i|=|B_i|[/math]. Как будет показано ниже, только при выполнении этого условия, рассматриваемые далее параллельные алгоритмы, основанные на сетях сортировки, дают верный результат для любого исходного расположения элементов массива [math]A[/math]. В случае, если число элементов сортируемого массива не делится нацело на число процессоров, можно дополнить исходный массив фиктивными элементами, исключив их после окончания сортировки.

Пусть [math]B_i^k[/math][math]k[/math]-ый элемент фрагмента массива [math]B_i[/math], расположенного на процессоре [math]i[/math].

Массив [math]B[/math] упорядочен, если выполняются следующие соотношения:

[math]B_i^k\le B_i^j[/math] , для любых [math]i[/math], при [math]k\lt j[/math],

[math]B_i^k\le B_l^j[/math] , для любых [math]k,j[/math], при [math]i\lt l[/math].

1.3 Вычислительное ядро алгоритма

1.4 Описание схемы реализации последовательного алгоритма

1.5 Последовательная сложность алгоритма

1.6 Информационный граф

1.7 Описание ресурса параллелизма алгоритма

1.8 Описание входных и выходных данных

1.9 Свойства алгоритма

2 Программная реализация

2.1 Особенности реализации последовательного алгоритма

2.2 Описание локальности данных и вычислений

2.2.1 Описание локальности алгоритма

2.2.2 Описание локальности реализации алгоритма

2.2.2.1 Описание структуры обращений в память и качественная оценка локальности
Профиль доступа к памяти


2.2.2.2 Количественная оценка локальности

2.3 Возможные способы и особенности реализации параллельного алгоритма

2.4 Масштабируемость алгоритма и его реализации

2.4.1 Описание масштабируемости алгоритма

2.4.2 Описание масштабируемости реализации алгоритма

2.5 Динамические характеристики и эффективность реализации алгоритма

2.6 Выводы для классов архитектур

2.7 Существующие реализации алгоритма

3 Литература

  1. Кнут Д.Э. Искусство программирования. – Т.3. – Сортировка и поиск 2-е изд.: Пер. с английского – М.: Вильямс, 2001. – 824 с.
  2. Седжвик Роберт. Фундаментальные алгоритмы на С++. Анализ/Структуры данных/Сортировка/Поиск: Пер. с англ./Роберт Седжвик. - СПб.: ООО "ДиаСофтЮП", 2002.-688с.