- •Моделирование и анализ параллельных вычислений.
- •Модель вычислений в виде графа "операции – операнды".
- •Описание схемы выполнения параллельного алгоритма (модель: «операции – операнды»).
- •Определение времени выполнения параллельного алгоритма.
- •Правила разработки алгоритмов.
- •Программирование параллельных алгоритмов.
- •Технология mpi.
- •Введение в библиотеку mpich.
- •Структура параллельной программы с использованием mpi:
- •Передача/прием сообщений между отдельными процессами.
- •Использование модульной структуры.
- •Определение времени выполнения программ.
- •Контроль выполнения программ.
- •Передача данных от одного процесса всем процессам программы.
- •Передача данных от всех процессов одному процессу. Операция редукции.
- •Пример коллективного вызова (без обмена)- коллективная синхронизация.
- •Аварийное завершение параллельной программы
- •Оценка коммуникационных затрат для кластерных систем.
- •Режимы передачи данных mpi.
- •Организация неблокирующих обменов данными между процессами.
- •Одновременное выполнение передачи и приема.
- •Группа процессоров и коммутаторов.
- •Управление группами.
- •Управление коммуникаторами.
- •Показатели эффективности в параллельных алгоритмах.
- •Модельная задача – вычисление частных сумм последовательности числовых значений.
- •Последовательный алгоритм суммирования
- •Каскадная схема суммирования.
- •Каскадная схема с асимптотически ненулевой эффективностью.
- •Построение частичных сумм.
- •Оценка максимального параллелизма.
- •Закон Амдаля
- •Закон Густавсона-Барсиса
- •Анализ масштабируемости параллельных вычислений.
- •Верхняя граница времени выполнения параллельного алгоритма.
- •Факторы, влияющие на производительность, и способы ее повышения.
- •Принципы разработка параллельных алгоритмов.
- •Моделирование (использование моделей) при проектировании параллельных алгоритмов.
- •Этапы разработки параллельных алгоритмов.
- •Разделение вычислительной схемы на независимые части, на основе ее анализа.
- •Определение информационных зависимостей.
- •Масштабирование набора подзадач.
- •Распределение подзадач между процессорами.
- •Умножение матриц при ленточной схеме разделения данных.
- •Определение подзадач.
- •Выделение информационных зависимостей
- •Масштабирование и распределение подзадач по процессорам
- •Анализ эффективности
- •Параллельное решение систем линейных уравнений Алгоритм решения систем линейных уравнений методом Гаусса.
- •Итерация прямого хода алгоритма Гаусса
- •Построение параллельного алгоритма
- •Масштабирование и распределение подзадач по процессорам.
- •Анализ эффективности.
- •Параллельные методы сортировки
- •Принципы распараллеливания
- •Масштабирование параллельных вычислений
- •Пузырьковая сортировка
- •Алгоритм чет-нечетной перестановки
- •Определение подзадач и выделение информационных зависимостей
- •Масштабирование и распределение подзадач по процессорам
- •Анализ эффективности
- •Параллельные вычисления при решении задач на графах.
- •Программная реализация параллельного алгоритма Флойда:
- •Определение подзадач.
- •Анализ эффективности
- •Результаты вычислительных экспериментов для параллельного алгоритма Флойда
- •Работа pvm
- •Структура идентификатора td
- •Модель передачи сообщений
- •Настройка pvm
- •Структура каталога pvm:
- •Наиболее распространенные проблемы
- •Пример простейшей программы
- •Структура программы pvm.
- •Выводы по pvm:
- •Классификация вычислительных систем
- •Алгоритмы предварительного распределения данных (графы)
- •Режимы параллельных вычислений с общей памятью
- •Основные обозначения псевдокода
- •Распределение данных в erew
- •Параллельное программирование с использованием общей памяти
- •Многопоточное программирование
- •Спецификация posix Threads
- •Пример программы с использованием posix Threads
- •Механизмы синхронизации потоков
- •Среда Open mp
- •Основные правила:
- •Синхронизация
- •Обзор средств параллельного и распределенного программирования.
- •Литература:
Передача данных от всех процессов одному процессу. Операция редукции.
В рассмотренной программе суммирования числовых значений имеющаяся процедура сбора и последующего суммирования данных является примером часто выполняемой коллективной операции передачи данных от всех процессов одному процессу. В этой операции над собираемыми значениями осуществляется та или иная обработка данных (для подчеркивания последнего момента данная операция еще именуется операцией редукции данных ). Как и ранее, реализация операции редукции при помощи обычных парных операций передачи данных является неэффективной и достаточно трудоемкой. Для наилучшего выполнения действий, связанных с редукцией данных, в MPI предусмотрена функция:
int MPI_Reduce (void *sendbuf, void *recvbuf, int count, MPI_Datatype type, MPI_Op op, int root, MPI_Comm comm);
где,
recvbuf – буфер принимаемого сообщения;
count- длина буфера
MPI_Op- операция при получении сообщения
Функция MPI_Reduce минимизирует затраты.
Основные операции при приеме сообщений при вызове Reduce:
M PI_SUM
MPI_PROD для целых или вещественных int, float
MPI_MIN MPI_MAX
Л огические операции:
MPI_LAND – конъюнкция
MPI_LOR – дизъюнкция целые операнды int
MPI_LXOR – исключающее или
Побитовые операции (разрядные):
M PI_BAND
MPI_BOR int, byte
MPI_BXOR
Операции выполняются над всеми элементами сообщения.
Если в сообщении два элемента, то отдельно суммируются первые элементы каждого сообщения и отдельно вторые элементы каждого сообщения.
MPI_Reduce (&ProcSum, &TotalSum, 1, MPI_DOUBLE, MPI_SUM, o, MPI_COMM_WORLD);
где о – ранг (root) получателя.
Чем больше процессов участвуют в обмене, тем больше разница между обменом точка-точка и коллективным вызовом Reduce. Reduce – вызов коллективного обмена, поэтому все процессы, указанные в Reduce коммутатора, должны выполнить этот вызов.
Пример коллективного вызова (без обмена)- коллективная синхронизация.
Существуют задачи, в которых есть точки получения промежуточных результатов всеми процессорами. Пока эти результаты не получены всеми, ни один процесс не должен продолжать свою работу. Для этого используется коллективный вызов:
Рис. 3
Продолжение работы начинается с момента, когда все процессы выполнят этот вызов, кто раньше выполнил –приостанавливается.
Рекомендация: выполнять аварийные завершения.
Аварийное завершение параллельной программы
Для корректного завершения параллельной программы в случае непредвиденных ситуаций необходимо использовать функцию:
int MPI_Abort (MPI_COMM comm, int errcode) или
MPI_ERR_OTHER - это корректное завершение программы
---------------------------------------------------------------------------------------
Для определения числа фактически полученных элементов сообщения необходимо использовать специальную функцию:
int MPI_Get_count (MPI_Status *status, MPI_Datatype, int * count);
Оценка коммуникационных затрат для кластерных систем.
Независимые компоненты, подключение к локальной сети. Модель этих затрат зависит от протокола. Все сообщения разбиваются на пакеты и передаются.
Для протоколов TCP/IP
Модель А.
А: tng (m)= + m * + ,
где :
tng (m) – время передачи данных,
- начальная подготовка const,
– служебная информация const,
Модель B.
B : = + m* +(m+ )* , n=1
+ ( - )* +(m+ )* , n>1
где:
n –число передаваемых пакетов
(m+ ) )* – время передачи данных
(708 байт) – число байт, служебных в пакете(одном)
(1500 байт) – максимальный размер пакета
m* – (m-количество байтов) время подготовки и передачи данных.
Некоторые действия могут быть совмещены со временем. Время начальной подготовки не может быть больше 1.
Модель С.
С: Хокни tng (m)= + m *
если определить, то можно контролировать время передачи
β=R= - пропускная способность, α=
Время подготовки определяется с помощью передачи сообщения минимальной длины.
Для определения пропускной способности передается сообщение максимальной длины.
При пересылке сообщения в 2000 байт, время (его погрешность), при повторении этого опыта много раз. Погрешность в процентах.
Байт |
А |
В |
С |
2000 ….. 2* ….. 5* |
33,45
8,44
5,91 |
7,93
0,44
1,21 |
34,8
8,41
6,05 |
Табл. 2