- •Моделирование и анализ параллельных вычислений.
- •Модель вычислений в виде графа "операции – операнды".
- •Описание схемы выполнения параллельного алгоритма (модель: «операции – операнды»).
- •Определение времени выполнения параллельного алгоритма.
- •Правила разработки алгоритмов.
- •Программирование параллельных алгоритмов.
- •Технология mpi.
- •Введение в библиотеку mpich.
- •Структура параллельной программы с использованием mpi:
- •Передача/прием сообщений между отдельными процессами.
- •Использование модульной структуры.
- •Определение времени выполнения программ.
- •Контроль выполнения программ.
- •Передача данных от одного процесса всем процессам программы.
- •Передача данных от всех процессов одному процессу. Операция редукции.
- •Пример коллективного вызова (без обмена)- коллективная синхронизация.
- •Аварийное завершение параллельной программы
- •Оценка коммуникационных затрат для кластерных систем.
- •Режимы передачи данных mpi.
- •Организация неблокирующих обменов данными между процессами.
- •Одновременное выполнение передачи и приема.
- •Группа процессоров и коммутаторов.
- •Управление группами.
- •Управление коммуникаторами.
- •Показатели эффективности в параллельных алгоритмах.
- •Модельная задача – вычисление частных сумм последовательности числовых значений.
- •Последовательный алгоритм суммирования
- •Каскадная схема суммирования.
- •Каскадная схема с асимптотически ненулевой эффективностью.
- •Построение частичных сумм.
- •Оценка максимального параллелизма.
- •Закон Амдаля
- •Закон Густавсона-Барсиса
- •Анализ масштабируемости параллельных вычислений.
- •Верхняя граница времени выполнения параллельного алгоритма.
- •Факторы, влияющие на производительность, и способы ее повышения.
- •Принципы разработка параллельных алгоритмов.
- •Моделирование (использование моделей) при проектировании параллельных алгоритмов.
- •Этапы разработки параллельных алгоритмов.
- •Разделение вычислительной схемы на независимые части, на основе ее анализа.
- •Определение информационных зависимостей.
- •Масштабирование набора подзадач.
- •Распределение подзадач между процессорами.
- •Умножение матриц при ленточной схеме разделения данных.
- •Определение подзадач.
- •Выделение информационных зависимостей
- •Масштабирование и распределение подзадач по процессорам
- •Анализ эффективности
- •Параллельное решение систем линейных уравнений Алгоритм решения систем линейных уравнений методом Гаусса.
- •Итерация прямого хода алгоритма Гаусса
- •Построение параллельного алгоритма
- •Масштабирование и распределение подзадач по процессорам.
- •Анализ эффективности.
- •Параллельные методы сортировки
- •Принципы распараллеливания
- •Масштабирование параллельных вычислений
- •Пузырьковая сортировка
- •Алгоритм чет-нечетной перестановки
- •Определение подзадач и выделение информационных зависимостей
- •Масштабирование и распределение подзадач по процессорам
- •Анализ эффективности
- •Параллельные вычисления при решении задач на графах.
- •Программная реализация параллельного алгоритма Флойда:
- •Определение подзадач.
- •Анализ эффективности
- •Результаты вычислительных экспериментов для параллельного алгоритма Флойда
- •Работа pvm
- •Структура идентификатора td
- •Модель передачи сообщений
- •Настройка pvm
- •Структура каталога pvm:
- •Наиболее распространенные проблемы
- •Пример простейшей программы
- •Структура программы pvm.
- •Выводы по pvm:
- •Классификация вычислительных систем
- •Алгоритмы предварительного распределения данных (графы)
- •Режимы параллельных вычислений с общей памятью
- •Основные обозначения псевдокода
- •Распределение данных в erew
- •Параллельное программирование с использованием общей памяти
- •Многопоточное программирование
- •Спецификация posix Threads
- •Пример программы с использованием posix Threads
- •Механизмы синхронизации потоков
- •Среда Open mp
- •Основные правила:
- •Синхронизация
- •Обзор средств параллельного и распределенного программирования.
- •Литература:
Основные правила:
- Переменные, объявленные вне блока параллельного выполнения, будут общие
- Статические переменные тоже являются общими
- Автоматические переменные, объявленные внутри параллельного блока – индивидуальны
- Локальные переменные и формальные параметры функции, вызываемые внутри параллельного блока- индивидуальны.
Существуют опции директивы параллели:
- private – определяет список переменных, которые будут индивидуальны для потоков, выполненных параллельно
- firstprivate – инициализация индивидуальных переменных, которые получат значения, равные значению переменных в главном потоке, в момент вхождения в параллельный участок
-reduction (оператор: список)
reduction (+:t) – в конце параллельного блока (все значения индивидуальных переменных t будут суммироваться)
Синхронизация
Выполняется с помощью atomic.
Критические секции critical [] – секции с одним и тем же именем не могут выполняться одновременно.
Директива master выделяет действие, которое выполняется только главным потоком.
# pragma omp master
{<действие}
Параллельное выполнение циклов позволяет получить ускорение. В технологии Open MP пользователь сам выбирает циклические участки, которые надо выполнить параллельно. Компилятор это не отслеживает.
Псевдо-код:
#pragma omp parallel for
for (i=0; i<n; i++)
# pragma omp atomic
S+=a[i]*b[i];
return S;
Можно ускорить:
#pragma omp parallel for
reduction (+, S)
for (i=0; i<n; i++)
# pragma omp atomic
S+=a[i]*b[i];
return S;
Функция shedule позволяет задать несколько режимов:
- статическое распределение по данному количеству
- динамическое распределение (нагружать освободившиеся процессы)
Лекция 15
Обзор средств параллельного и распределенного программирования.
Технология DVM (Digital Virtual Machine)-выполнена институтом Прикладной математики Академии Наук.
Принципы реализации этой системы:
Высокоуровневая модель выполнения программ;
Спецификация параллельного программирования невидимы для обычных трансляторов;
Модель языковых конструкций параллельного программирования близка к модели выполнения программы;
Основная работа по выполнению программы реализуется системой DVM;
Система DVM базируется на библиотеке MPI, следовательно, переносимость относительно платформы. Синтаксис и семантика директив DVM практически совпадает с синтаксисом и семантикой языка Си.
Структурные особенности модели DVM – программ:
Выполняется на виртуальной MPI – машине (но есть и реализации на PVM);
Виртуальная многопроцессорная система представляется как многомерная решетка процессоров;
При запуске выполнение программы начинается сразу на всех процессорах, при этом 1 процесс выполняет поток управления;
Допускается иерархия распараллеливания (на верхнем уровне выполняются независимые по данным задачи, а на нижних- параллельные циклы. В конце ветвей или задач выполняется редукция);
При входе в параллельный блок поток управления разбивается на несколько потоков;
Все переменные репродуцируются по процессам и являются при этом локальными переменными;
Оператор присваивания выполняется в режим собственных вычислений (результат выполнения этого оператора передается этому процессору, которому доступна переменная из левой части оператора);
Существует возможность отображения задач на секции решетки. Отображение может быть статическим или динамическим. Существуют различные режимы работы с данными. Доступно редуцирование.
Реализуется и используется система DVM на различных сетях: HP, IBM, SUN; OC: UNIX, Windows.
Документация: www.keldysh.ru/dvm
Язык mpC
Предназначен для организации вычислений на неоднородных сетях.
Характерные принципы:
При организации таких вычислений не указывается, сколько процессов используется и на каких процессорах. Вместо этих настроек используется понятие-сеть. После задания сети определяется отображение виртуальных процессоров на реальные процессы.
Синхронизация – основное средство.
Язык Occam
Минимальными средствами решена задача разработки системы программирования на транспьютерах.
Фирма INMOS – производитель транспьютеров. Базовые элементы: декларации и три процесса (присваивание, ввод, вывод) .Эти три процесса объединяются в реальные процессы с помощью конструкторов:
Последовательный – создает участки с последовательным выполнением
Параллельный
Защищенного взаимодействия
Язык CSP
Моделирование приложений. Все взаимодействуется в результате событий. События:
присоединение (последовательное выполнение программы)
рекурсия участка программ
защищенный выбор (моделирование недетерминированного участка)
Язык Linda
Язык разделяемых переменных и асинхронных сообщений. Любой последовательный язык можно дополнить примитивами Linda и получить параллельный язык.
Портфель задач. Задача – единица работы. Задача помещается в некий портфель, который разделяется процессами. Разделяется по следующей схеме:
получить задачу
проверить наличие задачи, если нет – завершить процесс
Нужно задать задачу, определить портфель, определить программу решения задачи, определить критерий окончания работы.
Для реализации: использование языка С с внедренным в него примитивами языка Linda.