- •Государственное образовательное учреждение
- •1 Параллельная обработка данных в вычислительных системах кластерного типа
- •1.1 Параллельная обработка данных
- •1.1.1 Основные определения
- •1.1.2 Два основных подхода к достижению параллельности
- •1.2 Модели и схемы параллелизма
- •1.2.1 Простейшая модель параллельного программирования (pram)
- •1.2.2 Простейшая классификация схем параллелизма
- •1.3 Существующие параллельные вычислительные средства класса mimd
- •1.4 Архитектура кластерных систем
- •1.5 Сетевое оборудование
- •1.5.1 Коммуникационная технология sci
- •1.5.2 Коммуникационная технология Myrinet
- •1.6 Системы программирования для кластеров
- •1.6.1 СтандартOpenMp
- •1.6.2 Стандарт mpi
- •1.6.3 Реализации mpi
- •1.7 Выводы по главе 1
- •2 Эффективность кластера и алгоритмы, используемые в параллельных и распределенных приложениях
- •2.1 Эффективность
- •2.2 Структура программы с двухточечным обменом данными между процессами
- •2.3 Алгоритмы
- •2.3.1 Вычисление частных сумм последовательности числовых значений
- •2.3.2 Умножение матрицы на вектор
- •2.3.3 Матричное умножение
- •2.3.4 Сортировка
- •2.3.5 Интегрирование
- •2.4 Выводы по главе 2
- •3 Практическая реализация системы кластерного типа
- •3.1 Создание кластера
- •3.2 Тестирование кластерной системы
- •3.3Выводы по главе 3
- •4 Руководство по эксплуатации кластерной системы
- •4.1 Руководство программиста
- •4.1.1 Среда разработки
- •4.1.2 Программный пакет wmpi 1.3
- •4.1.3 Состав пакетаWmpi1.3
- •4.1.4 Основные функцииMpi
- •4.2 Руководство пользователя
- •4.2.1 Построение программы
- •4.2.2 Запуск
- •4.3 Выводы по главе 4
- •Заключение
- •Список использованных источников
2.3.4 Сортировка
Сортировка является одной из типовых проблем обработки данных, и обычно понимается как задача размещения элементов неупорядоченного набора значений
![]()
в порядке монотонного возрастания или убывания
![]()
Вычислительная трудоемкость процедуры упорядочивания является достаточно высокой. Так, для ряда известных простых методов (пузырьковая сортировка, сортировка включением и др.) количество необходимых операций определяется квадратичной зависимостью от числа упорядочиваемых данных
.
Для более эффективных алгоритмов (сортировка слиянием, сортировка Шелла, быстрая сортировка) трудоемкость определяется величиной
.
Данное
выражение дает также нижнюю оценку
необходимого количества операций для
упорядочивания набора из
значений; алгоритмы с меньшей трудоемкостью
могут быть получены только для частных
вариантов задачи.
Ускорение
сортировки может быть обеспечено при
использовании нескольких (
,
)
процессоров. Исходный упорядочиваемый
набор в этом случае разделяется между
процессорами; в ходе сортировки данные
пересылаются между процессорами и
упорядочиваются на каждом из них.
Результирующие (упорядоченные) наборы,
передаются обратно главному процессу
объединяются в один вектор.
При детальном рассмотрении способов упорядочивания данных, применяемых в алгоритмах сортировки, можно обратить внимание, что многие методы основаны на применении одной и той же базовой операции "сравнить и переставить" (compare-exchange), состоящей в сравнении той или иной пары значений из сортируемого набора данных и перестановки этих значений, если их порядок не соответствует условиям сортировки
// операция "сравнить и переставить"
if ( a[i] > a[j] ) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
Целенаправленное применение данной операции позволяет упорядочить данные; в способах выбора пар значений для сравнения собственно и проявляется различие алгоритмов сортировки. Так, например, в пузырьковой сортировке [7] осуществляется последовательное сравнение всех соседних элементов; в результате прохода по упорядочиваемому набору данных в последнем (верхнем) элементе оказывается максимальное значение ("всплывание пузырька"); далее для продолжения сортировки этот уже упорядоченный элемент отбрасывается и действия алгоритма повторяются
// пузырьковая сортировка
for ( i=1; i<n; i++ )
for ( j=0; j<n-i; j++ )
<сравнить и переставить элементы (a[j], a[j+1])>
}
Для
параллельного обобщения выделенной
базовой операции сортировки рассмотрим
первоначально ситуацию, когда количество
процессоров совпадает с числом сортируемых
значений (т.е.
).
Тогда сравнение значений
и
,
располагаемых, например, на процессорах
и
,
можно организовать следующим образом:
- выполнить
взаимообмен имеющихся на процессорах
и
значений
(с сохранением на этих процессорах
исходных элементов);
- сравнить
на каждом процессоре
и
получившиеся
одинаковые пары значений (
,
);
результаты сравнения используются для
разделения данных между процессорами
– на одном процессоре (например,
)
остается меньший элемент, другой
процессор (т.е.
)
запоминает для дальней обработки большее
значение пары
,
.
Рассмотренное
параллельное обобщение базовой операции
сортировки может быть надлежащим образом
адаптировано и для случая
,
когда количество процессоров является
меньшим числа упорядочиваемых значений.
В данной ситуации каждый процессор
будет содержать уже не единственное
значение, а часть (блок
размера
)
сортируемого набора данных. Эти блоки
обычно упорядочиваются в самом начале
сортировки на каждом процессоре в
отдельности при помощи какого-либо
быстрого алгоритма (предварительная
стадия параллельной сортировки). Далее,
следуя схеме одноэлементного сравнения,
взаимодействие пары процессоров
и
для
совместного упорядочения содержимого
блоков
и
может
быть осуществлено следующим образом:
- выполнить
взаимообмен блоков между процессорами
и
;
- объединить
блоки
и
на
каждом процессоре в один отсортированный
блок двойного размера (при исходной
упорядоченности блоков
и
процедура
их объединения сводится к быстрой
операции слияния упорядоченных наборов
данных);
- разделить
полученный двойной блок на две равные
части и оставить одну из этих частей
(например, с меньшими значениями данных)
на процессоре
,
а другую часть (с большими значениями
соответственно) – на процессоре![]()
.
Рассмотренная
процедура обычно именуется в литературе
как операция "сравнить
и разделить"
(compare-split).
Следует отметить, что сформированные
в результате такой процедуры блоки на
процессорах
и
совпадают
по размеру с исходными блоками
и
и
все значения, расположенные на процессоре
,
являются меньшими значений на процессоре
.[13]
Для реализации алгоритма воспользуемся
модельюSIMD.
Вычислим эффективность алгоритма сортировки. По закону Амдала ускорение можно определить следующим образом
,
,
W=
.
