- •Государственное образовательное учреждение
- •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= .