- •Государственное образовательное учреждение
- •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.2 Структура программы с двухточечным обменом данными между процессами
Рассмотрим простейший случай взаимодействия параллельных ветвей задачи, так называемый двухточечный обмен данными.
“Для начала необходимо отметить несколько важных моментов:
Все функции и идентификаторы в MPI начинаются с префикса MPI_.
Программа пишется на языке C++ и компилируется в системе Microsoft Visual C++ 6.0. (в связи с использованием здесь пакета WMPI 1.3, но возможны и другие компиляторы после соответствующей настройки). Настройка проекта для подготовки и компиляции задачи с применением библиотеки Mpi.h, рассматривается ниже.
Создаётся единый текст программы для всех ветвей задачи. После компиляции создаётся единый код для всех процессов, которые будут запущены.
При запуске программы на исполнение, пользователь может запустить любое число процессов, в пределах введённого в конкретной системе ограничения.
Каждый процесс запускается с единым программным кодом, но со своей копией данных. Т.е. все процессы имеют единый набор команд, единый набор данных, но для каждого процесса создаётся своя копия набора команд и своя копия набора данных. Например, если в программе описана переменная X, то для каждого процесса будет создана своя копия переменной X.
Для того чтобы каждый процесс выполнял только свою часть задачи, существует система нумерации процессов в задаче. Все процессы делятся на группы, каждому процессу группы присваивается свой индивидуальный номер. Получить номер процесса можно с помощью функции MPI_Comm_rank. Используя свой номер, процесс может выполнять те или иные действия. Выполнение действий процесса в зависимости от его номера закладывается программистом.
Нумерация процессов всегда начинается с 0.
Библиотека MPI инициализируется функцией MPI_Init, при выходе из программы всегда необходимо выполнять функцию MPI_Finalize.”[14]
Теперь рассмотрим основные алгоритмы используемые в параллельном программировании.
2.3 Алгоритмы
2.3.1 Вычисление частных сумм последовательности числовых значений
Рассмотрим для первоначального ознакомления со способами построения и анализа параллельных методов вычислений сравнительно простую задачу нахождения частных сумм последовательности числовых значений
, где n есть количество суммируемых значений (данная задача известна также под названием prefix sum problem).
Традиционный алгоритм для решения этой задачи состоит в последовательном суммировании элементов числового набора
Последовательная вычислительная схема данного алгоритма может быть представлена следующим образом [13] (см. рис. 3.1):
Рис. 3.1. Последовательная вычислительная схема алгоритма суммирования
Для возможности параллельной работы алгоритм следует модифицировать. Для этого сгруппируем данные в зависимости от количества запущенных процессов p. Каждая группа будет состоять из k = n/p элементов, где k – целое число. Если k получается не целое, то оно округляется до целого, а не вошедшие в группу элементы входят в группу к 0-му процессу. Сгруппированные данные направляются каждому процессу на обработку. В результате вычислений, каждый процесс возвращает свой результат суммирования элементов, которые объединяются в итоговое значение суммы (см. рис. 3.2). Для реализации алгоритма воспользуемся моделью SIMD.
Рис. 3.2. Модифицированная схема суммирования
Вычислим эффективность алгоритма частных сумм. По закону Амдала ускорение можно определить следующим образом
, , W = n -1.