ПРАВОСЛАВНЫЙ СВЯТО-ТИХОНОВСКИЙ ГУМАНИТАРНЫЙ УНИВЕРСИТЕТ КАФЕДРА ИНФОРМАТИКИ С. В. БУЯНОВ Описание курса ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ для студентов, обучающихся по специальности 351500 – «МАТЕМАТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ И АДМИНИСТРИРОВАНИЕ ИНФОРМАЦИОННЫХ СИСТЕМ» _ Москва 2006 Описание курса подготовлено: С.В. Буянов, к.т.н., Рецензенты: ___________________________________ ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ: Учеб.-метод. материалы. - М., 2005: Изд-во ПСТГУ Учебно-методические материалы утверждены на заседании кафедры «Информатики» (протокол № ) Требования стандарта Рабочая программа соответствует Государственному образовательному стандарту высшего профессионального образования: ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ методы и средства параллельной обработки информации: параллельные вычислительные методы, параллельные вычислительные системы, параллельное программирование; векторизация последовательных выражений алгоритмов, методология канонического отображения алгоритма в графы зависимостей и потока сигналов, в матричный процессор; средства спецификации параллельных процессов; механизмы взаимодействия асинхронных параллельных процессов; синхронизирующие примитивы; методы и языки параллельного программирования: язык Ада, матричный язык потоков данных, язык Оккам: основные конструкции и приемы программирования; применения языков для решения практических задач; сравнение языков; эффективность применения; мультипрограммные системы; параллельная обработка информации в транспьютерных системах. Цели изучения дисциплины Актуальность и причины ведения учебной дисциплины обусловлены развитием высокопроизводительных вычислений в России и важностью данного направления в решении актуальных научных задач. Создание многопроцессорных (параллельных) вычислительных систем (ПВС) является стратегически важной задачей, обуславливаемой существованием в любой текущий момент времени актуальных задач фундаментальной и прикладной науки, для анализа и исследования которых производительности существующих средств вычислительной техники оказывается недостаточно. Тем не менее, практическое использование параллельных вычислительных систем не является столь широким, как это могло бы быть потенциально возможным. Одним из сдерживающих факторов, препятствующим широкому распространению параллельных вычислений следует отнести большую стоимость и разнообразие архитектурного построения ПВС. Преодоление этого сдерживающего фактора может быть достигнуто путем широкого применения кластерных вычислительных систем (clusters). Они могут быть образованы на базе уже существующих у потребителей отдельных компьютеров либо же сконструированы из типовых компьютерных элементов, что обычно не требует значительных финансовых затрат. Применение кластеров может также в некоторой степени снизить проблемы, связанные с разработкой параллельных алгоритмов и программ, поскольку повышение вычислительной мощности отдельных процессоров позволяет строить кластеры из сравнительно небольшого количества (несколько десятков) отдельных компьютеров (lowly parallel processing). Это приводит к тому, что для параллельного выполнения в алгоритмах решения вычислительных задач достаточно выделять только крупные независимые части расчетов (coarse granularity), что, в свою очередь, снижает сложность построения параллельных методов вычислений и уменьшает потоки передаваемых данных между компьютерами кластера. Использование параллельных вычислительных систем для решения вычислительнотрудоемких задач предполагает наряду со знанием математических проблем параллельных вычислений практическое освоение средств разработки параллельных программ. Эти средства обеспечивает целый спектр возможных подходов к области параллельных вычислений от использования новых специализированных языков параллельного программирования (например, языка ОККАМ) до применения "обычных" последовательных языков С и Фортран, в которых возможность разработки параллельных программ обеспечивается за счет использования технологических (инструментальных) библиотек типа MPI и PVM. Наличие такого широкого набора средств параллельного программирования обуславливается прежде всего характерными особенностями вычислительно-трудоемких задач, с учетом которых разработка программ может быть проведена более эффективно, и разнообразием существующих параллельных вычислительных систем (прежде всего многопроцессорных систем с общей и распределенной памятью). Как результат, изучение разных средств параллельного программирования в рамках единого курса позволит получить знания по каждой конкретной технологии программирования в отдельности, сопоставить единство и различие всех рассматриваемых подходов и получить, тем самым, понимание общих принципов разработки параллельных программ. На лекционных занятиях дается обзор многопроцессорных вычислительных систем и их классификации, обзор средств параллельного программирования, основы распараллеливания алгоритмов. На практических занятиях студенты реализуют набор простейших параллельных алгоритмов и проводят исследование их параллельных свойств. В результате изучения данной дисциплины студенты должны научится решать задачи, требующие больших вычислительных мощностей, разлагать сложные задачи на независимые маленькие подзадачи, производить и синхронизировать вычисления сразу на большом количестве вычислительных единиц, использовать кластерные и многопроцессорные системы. Также студенты должны изучить несколько стандартных средств параллельных вычислений (например, MPI) и научиться создавать собственные способы реализации параллельной обработки. Задачи курса Использование многопроцессорных вычислительных систем предполагает практическое освоение следующих разделов параллельного программирования: Общая характеристика параллельных вычислительных систем, Аппаратное обеспечение вычислительного кластера, Коммуникационная среда передачи данных, Архитектурные принципы реализации параллельной обработки в вычислительных машинах; Принципы разработки параллельных алгоритмов и программ, Методы и языковые механизмы конструирования параллельных программ; Параллельные вычислительные методы. Алгоритмический язык параллельного программирования ОККАМ, Алгоритмический язык Фортран HPF для параллельного программирования, Технология для разработки параллельных программ для систем с общей памятью (OpenMP) и распределенной памятью (библиотека MPI), Параллельные численные алгоритмы для решения вычислительно-трудоемких задач. Студент также должен получить теоретические знания по основам построения глобальных сетей, создания информационных систем в сети интернет, ознакомиться с теорией параллельных процессов. Связь с другими дисциплинами Для изучения курса необходимо знание следующих курсов: «информатика», «программирование», «архитектура вычислительных систем и компьютерных сетей», "Операционные системы и оболочки". При выполнении практических и лабораторных заданий обучаемые должны владеть методами программирования на алгоритмическом языке С. 3. ОБЪЕМ ДИСЦИПЛИНЫ И ВИДЫ УЧЕБНОЙ РАБОТЫ Вид учебной работы Общая трудоемкость Аудиторные занятия Лекции Лабораторные работы Самостоятельная работа Реферат/курсовая работа/выпускная квалификационная работа Вид итогового контроля Всего часов Семестры 153 75 45 30 77 7 7 7 7 7 7 7 Зачет 4. СОДЕРЖАНИЕ ДИСЦИПЛИНЫ 4.1. РАЗДЕЛЫ ДИСЦИПЛИНЫ И ВИДЫ ЗАНЯТИЙ № п/п Тематический план 1 1 2 2 Архитектура высокопроизводительных ЭВМ Принципы и механизмы построения сети Интернет Лекции 3 2 2 Практические занятия, семинары 4 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Оценка эффективности параллельных вычислений Общие принципы построения параллельных алгоритмов и программ Общая характеристика теории процессов Хоара Язык параллельного программирования ОККАМ Алгоритмический язык Фортран HPF для параллельного программирования Специфика базовых понятий Алгоритмический язык Фортран HPF для параллельного программирования Управление параллельными вычислениями. Технология OpenMP для разработки параллельных программ для систем с общей памятью Общая характеристика технологии OpenMP для разработки параллельных программ для систем с общей памятью Общая характеристика среды выполнения OpenMP Разработка параллельных программ для систем с распределенной памятью с использованием библиотеки MPI Общая характеристика подхода Общая характеристика среды выполнения с использованием библиотеки MPI Параллельные численные алгоритмы линейной алгебры Параллельная сортировка данных Параллельная обработка графов 2 2 2 2 2 2 2 6 4 4 4 6 4 4 4 6 2 4 2 2 Содержание курса 1. Общая характеристика параллельных вычислительных систем (4 часа) 1.1. Архитектура высокопроизводительных ЭВМ (2 часа) Функциональные вычислительные устройства. Многоуровневая и модульная память. Конвейерные и векторные вычисления. Процессорные матрицы. Многопроцессорные вычислительные системы с общей и распределенной памятью (мультипроцессоры и мультикомпьютеры). Микропроцессорные системы. Схемы коммутации (полная коммутация - общая память, перекрестные коммутаторы, локальные схемы коммутации - общая шина, решетки, кластеры). Анализ параллельных алгоритмов и типовые топологии схем коммутации – кольцо, линейка, решетки, полный граф, гиперкуб, тор, дерево. Аппаратная реализация и программная эмуляция топологий. Классификация многопроцессорных вычислительных систем СуперЭВМ. Многопроцессорные вычислительные комплексы (МВС). Многомашинные вычислительные комплексы. Сети ЭВМ. Высокопроизводительные вычислительные кластеры. Примеры современных высокопроизводительных вычислительных систем (Cray T932, IBM SP2, HP Exemplar, ASCI RED). Суперкомпьютерные вычислительные системы в России. Систематика Флинна. Потоки данных (команд). Конкретизация видов многопроцессорных систем: векторные компьютеры, симметричные мультипроцессоры (SMP), массивно-параллельные компьютерные системы (MPP), Кластерные системы. Необходимость создания. История проекта Beowulf. История проекта Avalon. Принципы построения кластерных вычислительных систем. Узлы :Архитектура узла вычислительного кластера. Особенности использования SMP-систем в качестве узлов (OpenMP – технология). Среда передачи данных: Выбор схемы коммутации. Сетевые технологии (сLAN, SCI, Gigabit Ethernet, Fast Ethernet, Myrinet) – основные характеристики, достоинства и недостатки, особенности использования. 1.2. Принципы и механизмы построения сети Интернет (2часа) Протоколы IP4, IP6, Маршрутизация, DNS и виртуальные серверы, Intranet-сети Прикладные протоколы стека TCP/IP: http, FTP, Почтовые протоколы,CGI. Системное программное обеспечение. Выбор операционной системы. Использование ОС семейства Windows в качестве платформы для построения кластера. Использование ОС Linux. Настройка операционной системы. Используемые компиляторы. 2. Принципы разработки параллельных алгоритмов и программ (4 часа) 2.1. Оценка эффективности параллельных вычислений (2 часа) Показатель эффекта распараллеливания (ускорение). Эффективность использования вычислительной системы. Способы оценки показателей. Основные характеристики вычислительной системы, влияющие на величины ускорения и эффективности (архитектура, количество процессоров, топология каналов передачи данных). Оценка коммуникационной трудоемкости параллельных алгоритмов Характеристики топологий сети передачи данных. Алгоритмы маршрутизации. Методы передачи данных. Анализ трудоемкости основных операций передачи данных. Передача данных между двумя процессорами сети. Одиночная и множественная рассылка сообщений. Операция циклического сдвига. Методы логического представления топологии коммуникационной среды. Отображение кольцевой топологии и топологии решетки на гиперкуб. Оценка производительности кластерной системы. Методика оценки производительности. Максимальная (пиковая) производительность. Удельная производительность. Широко используемые тесты производительности (LINPACK, тесты NASA). Значения показателей производительности для ряда МВС. 2.2. Общие принципы построения параллельных алгоритмов и программ (2 часа) Распараллеливание вычислений на уровне команд, выражений, программных модулей, отдельно выполняемых заданий. Выбор параллельного алгоритма. Реализация алгоритма в виде параллельной программы. Построение исполняемой программы для параллельной вычислительной системы. Параллельное исполнение машинной программы. Частные постановки: выбор оптимального алгоритма для конкретной вычислительной системы, нахождение наилучшей топологии вычислительной системы для решения определенной задачи, распараллеливание существующего алгоритма. Декомпозиция алгоритма на параллельно исполняемые блоки вычислений. Распределение заданий по процессорам и балансировка. Организация взаимодействия. Синхронизация и взаимоисключение. Передача данных между процессорами. Инструментальные системы автоматического и полуавтоматического распараллеливания Задача автоматического распараллеливания: Сложность написания параллельных программ. Унаследованный последовательный код. Полуавтоматическое распараллеливание:Перенос последовательного кода в параллельную среду. Расширения "последовательных" языков программирования. Директивы пользователя. Система DVM. Принятые подходы к созданию параллельных программ. Популярные технологии. PVM - концепция параллельной виртуальной вычислительной машины и ее представление в виде распределенной неоднородной системы компьютеров. Инсталляция PVM. Программирование с использованием PVM. Запуск приложений в среде PVM. MPI библиотека передачи сообщений. Стандарты MPI. Различные реализации MPI. Выбор и установка библиотеки MPI. Подключение MPI к среде программирования. Отладка приложений, использующих MPI. Запуск приложений, написанных с использованием MPI. Средства разработки параллельных программ. Использование специализированных языков параллельного программирования (ОККАМ). Применение параллельных расширений существующих алгоритмических языков (HPF). Построение параллельного программного обеспечения на основе существующих последовательных программ с использованием средств предкомпиляции (технология OpenMP). Использование технологических (инструментальных) библиотек параллельного программирования (библиотеки MPI И PVM). Общая характеристика проблемы тестирования и отладки параллельных программ. 3. Алгоритмический язык параллельного программирования ОККАМ (4 часа) 3.1. Общая характеристика теории процессов Хоара (2 часа) Понятие процесса и его описание при помощи протоколов. Операции над протоколами. Последовательные и параллельные процессы. Моделирование недетерминизма. Описание взаимодействия процессов. Понятие разделяемых ресурсов. Общая характеристика транспьютерных систем Особенности архитектуры транспьютера. Каналы связи. Аппаратная поддержка разделения времени между процессами. Общая структура мультитранспьютерных систем. 3.2. Язык параллельного программирования ОККАМ (2 часа) Концепция процесса в ОККАМ. Элементарные и составные процессы. Методы конструирования агрегированных процессов (последовательное и параллельное исполнение, условие, выбор и селекция процессов, цикл и репликация). Принципы передачи данных между процессами при помощи каналов. Типы данных. Описание каналов. Процедуры и функции. Работа с внешними устройствами. Примеры программ на алгоритмическом языке ОККАМ: умножение матрицы на вектор, быстрая сортировка данных. 4. Алгоритмический язык Фортран HPF для параллельного программирования (4 часа) 4.1.Специфика базовых понятий (2 часа ) Базовые типы данных. Операторы описания. Выражения. Указатели. Конструирование производных типов данных. Структура программы. Понятие подпрограммы. Модули и интерфейсы. Массивы. Сечения. Динамические массивы. Конструкторы. Оператор WHERE. Директивы распределения данных DISTRIBUTE и ALIGN. Распределение многомерных и динамических массивов. 4.2.Управление параллельными вычислениями. (2 часа ) Оператор FORALL. Директива INDEPENDENT. Учебный пример: матричное умножение 5. Технология OpenMP для разработки параллельных программ для систем с общей памятью (4 часа) 5.1. Общая характеристика технологии (2 часа) Технология OpenMP как стандарт параллельного программирования для многопроцессорных систем с общей памятью (SMP, NUMA и др.). История развития стандарта. Международные организации стандартизации технологии. Общая характеристика подхода. Разработка параллельных программа на основе их последовательных прототипов. Внесение указаний о распараллеливании в виде директив препроцессора. Положительные стороны технологии: поэтапность разработки, единство последовательного и параллельного кода, стандартизованность, возможность применения для наиболее распространенных языков программирования С и Фортран. Формат записи директив. Области видимости директив. Статический и динамический контекст. Отделенные директивы. Управление параллельными областями. Пульсирующий (fork-join) принцип организации параллелизма. Создание параллельных областей. Директива PARALLEL. Разделение вычислительной нагрузки между потоками. Директивы DO/FOR и SECTIONS. Балансировка вычислений. Управление разделяемыми данными . Общие (разделяемые) и локальные данные потоков. Необходимость синхронизации. Директивы CRITICAL, ATOMIC и BARRIER. Параметры SHARED и PRIVATE директивы PARALLEL. Синхронизированные версии выполнения операций (редукция данных). Параметры REDUCTION директивы PARALLEL. Взаимоисключение доступа к общим переменным. Семафоры (замки). Функции INIT_LOCK, SET_LOCK и UNSET_LOCK. 5.2. Общая характеристика среды выполнения(2 часа). Функции и переменные окружения. Сравнительная характеристика компиляторов, обеспечивающих поддержку технологии OpenMP. Учебно-практическая задача численного решения дифференциальных уравнений в частных производных Постановка задачи. Задача Дирихле для уравнения Пуассона. Конечно-разностная аппроксимация задачи и алгоритм Гаусса-Зейделя. Использование OpenMP для организации параллелизма. Проблема синхронизации параллельных вычислений. Возможность неоднозначности вычислений в параллельных программах. Проблема взаимоблокировки. Исключение неоднозначности вычислений. Волновые схемы параллельных вычислений. Балансировка вычислительной нагрузки процессоров. Результаты вычислительных экспериментов. 6. Разработка параллельных программ для систем с распределенной памятью с использованием библиотеки MPI (4 часа) 6.1. Общая характеристика подхода (2 часа) Модель организации параллельных вычислений в виде одновременного выполнения одной и той же программы на нескольких процессорах (single program multiple data - SPMD). Организация взаимодействия параллельно выполняемых программ при помощи передачи сообщений (message passing interface - MPI). Стандарт спецификаций процедур передачи данных как основа разработки мобильных (переносимых) параллельных программ для разнородных многопроцессорных вычислительных систем. История развития стандарта MPI. Международные организации стандартизации технологии. Общая характеристика подхода: процессы, сообщения, типы данных, коммуникаторы, топологии. Формат записи команд вызова функций библиотеки MPI. Структура программы и минимально необходимый набор функций. Общая характеристика среды выполнения. Определение состава используемых процессоров. Команда запуска на выполнение mpirun. Учебный пример. Положительные стороны технологии: инкапсуляция низкоуровневых проблем передачи данных, возможность предварительной подготовки параллельных программ на однопроцессорных компьютерах, стандартизованность, применимость для наиболее распространенных языков программирования С и Фортран. Управление обменом сообщений между процессами. Функции передачи сообщений MPI_Send и MPI_Recv. Описание пересылаемых данных. Идентификация процессов и сообщений. Коллективные операции передачи данных. Передача данных всем процессам (функция MPI_Bcast). Операции редукции данных (функция MPI_Reduce). Синхронизация вычислений (функция MPI_Barrier). Учебный пример: численное интегрирование.Режимы передачи сообщений (блокирующий, синхронный, буферизуемый, по готовности). Попарный обмен сообщений. Общая характеристика дополнительных операций передачи данных. Управление данными Базовые типы данных в MPI. Понятие производного типа данных. Карта и сигнатура типа. Методы конструирования производных типов данных: непрерывный, векторный, Нвекторный, индексный, Н-векторный, упакованный. Общий способ определения производного типа данных. Учебный пример: ленточная схема разделения данных при умножении матриц. Управление процессами Понятие группы процессов и коммуникатора. Функции для управления группами и коммуникаторами. Учебный пример: моделирование топологии взаимодействия процессов в виде прямоугольной решетки. Функции MPI для работы с виртуальными топологиями взаимодействия процессов. 6.2. Общая характеристика среды выполнения (2 часа) Функции и переменные окружения. Сравнительная характеристика реализаций библиотеки MPI. Учебно-практическая задача численного решения дифференциальных уравнений в частных производных Способы разделения данных. Обмен информацией между процессорами. Коллективные операции обмена информацией. Организация волны вычислений. Блочная схема разделения данных. Оценка трудоемкости операций передачи данных. 7. Параллельные численные алгоритмы для решения вычислительно-трудоемких задач (6 часов) 7.1. Параллельные численные алгоритмы линейной алгебры (2 часа) Способы разбиения матриц (горизонтальная, вертикальная, блочные схемы). Методы вычисления произведения матриц с использованием разных схем разбиения матриц. Блочные алгоритмы Фокса и Кэннона. Обеспечение предельно допустимого параллелизма. Обращение матриц. Параллельные методы решения систем линейных уравнений. 7.2. Параллельная сортировка данных (2часа) Параллельное обобщение базовой операции сортировки. Пузырьковая сортировка. Сортировка Шелла. Быстрая сортировка. 7.3. Параллельная обработка графов (2 часа) Нахождение минимально охватывающего дерева (параллельный вариант алгоритма Прима). Поиск кратчайших путей (параллельный вариант алгоритма Дейкстры). Базовые типы данных в MPI. Понятие производного типа данных. Карта и сигнатура типа. Методы конструирования производных типов данных: непрерывный, векторный, Нвекторный, индексный, Н-векторный, упакованный. Общий способ определения производного типа данных. Учебный пример: ленточная схема разделения данных при умножении матриц. Лабораторный практикум При реализации алгоритмов на параллельных компьютерах для анализа эффективности варианта распараллеливания необходимо проводить исследование по следующей схеме: 1) написать последовательный алгоритм решения задачи; 2) определить время, затраченное на реализацию последовательного алгоритма; 3) написать параллельный алгоритм решения задачи; 4) определить время, затраченное на реализацию параллельного алгоритма (р - количество процессоров); 5) вычислить ускорение параллельного алгоритма по сравнению с последовательным; 6) вычислить эффективность параллельного алгоритма. Студент сдает параллельную и последовательную версии программ, реализующих заданный алгоритм, таблицы и графики, демонстрирующие основные характеристики результатов выполнения программ на вычислительном кластере. Часть 1. Методы параллельного программирования для вычислительных систем с распределенной памятью 1. Разработка параллельных программ с использованием интерфейса передачи сообщений MPI - 2 часа Мини-MPI (старт, финиш, передача и прием сообщений). Пример 1: Начальная параллельная программа (печать идентификаторов процессов) - запуск (локальный, распределенный). Оценка времени выполнения программы, синхронизация, коллективные операции. Пример 2: Численное интегрирование- создание проекта на основе готового исходного текста программы, настройка опций, компиляция, запуск. Пример 3: Скалярное произведение векторов (самостоятельное задание 7). 2. Практикум по разработке параллельных алгоритмов и программ для решения задач вычислительной математики - 4 часа Обзор библиотеки MPI: установка, настройка, схема функционирования. Пример 4: Решение задач распознавания образов (выполнение задания под руководством преподавателя). Пример 5. Умножение матриц, ленточный алгоритм (самостоятельное задание 2). Пример 6. Умножение матриц, блочные схемы распределения данных (алгоритмы Фокса и Кеннона). 3. Практикум по использованию библиотек параллельных методов ParaLib для решения задач вычислительной математики - 2 часа Обзор библиотеки ParaLib: назначение, классы решаемых задач, принципы разработки. Пример 7. Функции библиотеки ParaLib для умножения матриц при блочном способе распределения данных" (алгоритмы Фокса и Кеннона): схема реализации, теоретическая оценка эффективности, вычислительные эксперименты. Анализ интенсивности потоков передачи данных, осуществляемых в ходе параллельных вычислений в системах с распределенной памятью, с использованием инструментальной библиотеки ParaScope. 4. Практикум по оценке эффективности параллельных методов для разных топологий многопроцессорных вычислительных систем - 4 часа Характеристика программной лаборатории ParaLab как интегрированной системы для проведения вычислительных экспериментов с параллельными методами для оценки их эффективности: - Моделирование многопроцессорных вычислительных систем (выбор топологии, задание количества и производительности процессоров, выбор метода передачи данных и задание коммуникационных характеристик сети), - Определение класса решаемых задач и задание параметров задачи, - Выбор параллельного метода решения задачи и настройка значений его параметров, - Установка графических индикаторов для наблюдения за процессом параллельных вычислений (состояние данных на процессорах системы, передача информации по сети, текущая оценка решения исходной вычислительной задачи), - Проведение экспериментов в режиме имитации вычислений; пошаговый, последовательный (непрерывный) и циклический (серийный) способы проведения экспериментов; одновременное выполнение нескольких экспериментов в режиме разделения времени для разных вариантов топологии вычислительной системы, параметров задачи, количества процессоров и т.п., - Анализ результатов с использованием сведений из журнала экспериментов; оценка времени решения задач в зависимости от размерности задачи и количества процессоров; построение зависимостей ускорения и эффективности параллельных вычислений, - Проведение экспериментов в режиме реальных параллельных вычислений; выполнение параллельных программ в виде множества независимых процессов на одном процессоре; удаленный доступ к многопроцессорной вычислительной системе (кластеру); сравнение теоретических оценок и результатов реальных вычислительных экспериментов. Часть 2. Методы параллельного программирования для вычислительных систем с общей памятью 5. Разработка параллельных программ с использованием технологии ОреnМР - 2 часа Общая характеристика технологии ОрепМР: потоки, параллельные области, распределение вычислений между потоками. Пример 8: Скалярное произведение векторов. Глобальные и локальные данные потоков. Критические секции доступа к разделяемым данным. Синхронизация. Пример 9. Умножение матриц самостоятельное задание 3). (варианты распараллеливания вложенных циклов, 6. Практикум по разработке параллельных алгоритмов и программ для решения задач вычислительной математики - 4 часа Пример 10. Параллельная сортировка: алгоритмы пузырьковой сортировки, сортировки Шелла и быстрой сортировки (выполнение задания под руководством преподавателя). Пример 11. Задачи обработки графов: построение минимального охватывающего дерева, поиск кратчайших путей (самостоятельное задание 4) Часть 3. Методы параллельного программирования для решения вычислительно-трудоемких научно-технических задач 7. Практикум по методам параллельных вычислений для решения дифференциальных уравнений в частных производных -2 часа Общая характеристика методом конечных разностей (метод сеток) для численного решения дифференциальных уравнений. Методы распараллеливания метода конечных разностей для вычислительных систем с общей памятью (организация взаимоисключения для оценки погрешности решения, избыток синхронизации, проблема сериализации и блокировки, обеспечение тождественности последовательного и параллельного вариантов расчетов, волновые схемы вычислений, блочная схема распределения данных, балансировка, использование очереди заданий). Методы распараллеливания метода конечных разностей для вычислительных систем с распределенной памятью (ленточная и блочная схемы распределения данных, волновые схемы вычислений, оценка трудоемкости передачи данных). Практикум по решению дифференциальных уравнений в частных производных с использованием учебно-исследовательской системы ParaGrid (постановка задачи, выполнение вычислений, визуализация данных, анализ результатов расчетов, изменение параметров и продолжение вычислений). 8. Практикум по использованию библиотек параллельных методов для решения сложных научно-технических задач - 4 часа Обзор библиотеки PLAPACK: структура, объекты, методы, использование. Пример 12: Умножение матриц - использование PLAPACK (выполнение задания под руководством преподавателя). 9. Практикум по методам параллельных вычислений для решения задач многомерной многоэкстремальной оптимизации -2 часа Общая характеристика предметной области (постановка задачи глобальной оптимизации, редукция размерности для сведения многомерных задач к одномерным постановкам, информационно-статистические алгоритмы глобального поиска, примеры). Использование множественных разверток типа кривой Пеано для построения различных сеток в области решения оптимизационной задачи. Сведение проблемы многомерной оптимизации к семейству одномерных информационно-совместимых задач. Параллельное решение задач порождаемого семейства и схема информационных обменов. Общность рассмотренного подхода для решения ряда вычислительно-трудоемких научнотехнических задач (интегрирование, решение систем нелинейных уравнений, восстановление зависимостей, поиск решений, оптимальных по набору критериев (многокритериальная оптимизация) и т.д.). Практикум по решению задач многоэкстремальной оптимизации с использованием системы параллельных вычислений Абсолют Эксперт (постановка задачи, выполнение вычислений, визуализация данных, анализ результатов расчетов, изменение параметров и продолжение вычислений). Вопросы к экзамену 1. Что такое параллельное программирование и суперкомпьютеры. Области в которых может возникать потребность в параллельных вычислениях. Особенности параллельных вычислений. 2. Увеличение производительности при параллельных вычислениях. К каким областям задач может быть применено распараллеливание к каким нет. Закон Амдала. 3. Оценки производительности вычислительных систем. 4. Компьютер в Фон-Неймонновском понимании. Различные архитектуры параллельных компьютеров. 5. Векторные компьютеры. 6. Параллельные компьютеры. 7. Классификация многопроцессорных вычислительных систем по организации памяти. 8. Классификация Флинна. 9. MIMD параллельные системы. 10. SIMD системы. 11. Кластерные компьютеры и их особенности. 12. Пример создания вычислительного кластера. 13. Основные характеристик производительности кластера. 14. Организация связи между элементами вычислительных систем 15. 16. Особенности построения параллельных алгоритмов. Системы автоматического распараллеливания и обычные схемы. Связь понятия функции в чистом виде и построения параллельных алгоритмов. 17. Степень параллелизма алгоритма. 18. Ускорение параллельного алгоритма. 19. Эффективность параллельного алгоритма. 20. Разделение на подзадачи. Установление связей между отдельными подзадачами. Объединение мелких подзадач в большие, законченные счетные единицы (агломерация). Алгоритмы с использованием менеджера и без использования. 21. Крупно и мелкозернистые алгоритмы. 22. Балансировка загрузки узлов. Зависимость выбора алгоритма от структуры вычислительной сети. 23. Средства параллельного программирования. 24. Средства поддержки параллельной работы: thread-ы. 25. Средства поддержки параллельной работы: параллелизм процессов, механизм синхронизации и механизм разделения ресурсов, семафоры, обмен сообщениями. 26. Современные средства "неавтоматического" параллельного программирования. MPI. Блокируемая и неблокируемая передача сообщений в MPI. 27. MPI( Message Passing Interface ) - интерфейс передачи сообщений, сравнение с другим ПО. 28. MPI. Коллективные взаимодействия процессов. Понятия групп и коммуникаторов, управление ими. 29. Обрамляющие функции MPI. 30. Основные возможности MPI. 31. Системы автоматического распараллеливания. Особенности программирования задач в таких системах. 32. Алгоритм редукции графа. 33. Система автоматического динамического распараллеливания Grace. 34. Простейшие алгоритмы и их степень параллелизма. 35. Алгоритм сдваивания. 36. Параллельный алгоритм скалярного умножения векторов и его ускорение по сравнению с последовательным алгоритмом. 37. Параллельный алгоритм умножения матрицы на вектор и его ускорение по сравнению с последовательным алгоритмом. 38. Параллельный алгоритм умножения матрицы на матрицу и его ускорение по сравнению с последовательным алгоритмом. 39. Параллельный алгоритм решения СЛАУ прямым методом Гаусса и его ускорение по сравнению с последовательным алгоритмом. 40. Параллельный алгоритм решения СЛАУ итерационными методами Якоби, Гаусса Зейделя и их ускорение по сравнению с последовательным алгоритмом. 41. Коммуникационные функции типа "точка-точка" 42. Коллективные функции. 43. Блокирующие и неблокирующие функции. Литература Основная 1. Камерон Хьюз, Трейси Хьюз. Параллельное и распределенное программирование с использованием С++. Изд. Вильямс, 2004 2. Грегори Р. Эндрюс основы многопоточного, параллельного и распределенного программирования. Изд. Вильямс, 2003 3. Богачев К.Ю. Основы параллельного программирования. - М.: БИНОМ. Лаборатория знаний, 2003. 4. В.В. Воеводин. Математические основы параллельных вычислений - М.: МГУ, 1991. 5. Воеводин В. В. Математические модели и методы в параллельных процессах. М.:, Наука, 1986. 6. Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. 7. Гергель В.П., Стронгин Р.Г. Основы параллельных вычислений для многопроцессорных вычислительных систем. - Н.Новгород, ННГУ, 2001. 8. Корнеев В. Г. Параллельные вычислительные системы. М.: “Нолидж",1999. - 320 с. 9. Корнеев В.В. Параллельное программирование в MPI. Москва-Ижевск: Институт компьютерных исследований, 2003. 10.Немнюгин С., Стесик О. Параллельное программирование для многопроцессорных вычислительных систем - СПб.: БХВ-Петербург, 2002. 11.Козлов О.С., Е.А. Метлицкий, А.В. Экало. Архитектура многопроцессорных вычислительных систем: Учебное пособие -Под редакцией В.И. Тимохина :- Л.: Изд-во Ленингр. ун-та, 1981. 12.Хокни Р., К. Джессхоуп. Параллельные ЭВМ. Архитектура, программирование и алгоритмы -М.: Радио и связь, 1986. Дополнительная 1. Афанасьев К.Е. и др. Многопроцессорные вычислительные системы и параллельное программирование. - Кемерово: Кузбассвузиздат, 2003. 2. Головашкин Д., С.П. Головашкина С.П. Методы параллельных вычислений. Ч. 2: . Самара: Самар. гос. аэрокосм, ун-т, 2003. 3. Головашкин Д.Л. Методы параллельных вычислений. Ч. 1. - Самара: Самар. гос. аэрокосм, ун-т, 2002. 4. Дацюк В.Н. и др. Методическое пособие по курсу "Многопроцессорные системы и параллельное программирование. - Ростов-на-Дону: РГУ, 2000. 5. Деменев А.Г. Параллельные вычислительные системы: основы программирования и компьютерного моделирования. - Пермь: ПГПУ, 2001. 6. Джоунз Г. Программирование на языке ОККАМ. - М.: Мир, 1989. 7. Дорошенко А.Е. Математические модели и методы организаций высокопроизводительных вычислений. Киев: Наукова думка, 2000. 8. Кнут Д. Искусство программирования для ЭВМ. Т. 3. Сортировка и поиск. - М.: Мир, 1981. 9. Корнеев В.В. Параллельное программирование в MPI. Москва-Ижевск: Институт компьютерных исследований, 2003. 10. Корнеев В.В.. Параллельные вычислительные системы. - М.: Нолидж, 1999. 11. Старченко А.В., Есаулов А.О., Параллельные вычисления на многопроцессорных вычислительных системах. - Томск: ТГУ, 2002. 12. Сырков Б.Ю., Матвеев С.В. Программное обеспечение мультитранспьютерных систем. - М.: Диалог-МИФИ, 1992. 13. Фурсов В.А. и др. Введение в программирование для параллельных ЭВМ и кластеров. - Самара: СНЦ РАН, СГАУ, 2000. 14. Хоар Ч. Взаимодействующие последовательные процессы. - М.: Мир, 1989. 15. Шпаковский Г.И., Серикова Н.В. Программирование для многопроцессорных систем в стандарте MPI: Пособие - Мн.: БГУ, 2002. 16. Эндрюс Г.Р. Основы многопоточного, параллельного и распределенного программирования. - М.: Издательский дом "Вильяме", 2003) 17. Якобовский М.В. Распределенные системы и сети. - М.: МГТУ "Станкин", 2000. 18. Barker, M. (Ed.) (2000). Cluster Computing Whitepaper http://www.dcs.port.ac.uk/~mab/tfcc/WhitePaper/. 19. Braeunnl Т. Parallel Programming. An Introduction.- Prentice Hall, 1996. 20. Chandra, R., Menon, R., Dagum, L., Kohr, D., Maydan, D., McDonald, J. Parallel Programming in OpenMP. - Morgan Kaufinann Publishers, 2000 21. Geist G.A., Beguelin A., Dongarra J., Jiang W., Manchek В., Sunderam V. PVM: Parallel Virtual Machine - A User's Guide and Tutorial for Network Parallel Computing. MIT Press, 1994. 22. Miller R., Boxer L. A Unified Approach to Sequential and Parallel Algorithms. Prentice Hall, Upper Saddle River, NJ. 2000. 23. Pacheco, S. P. Parallel programming with MPI. Morgan Kaufmann Publishers, San Francisco. 1997 24. Parallel and Distributed Computing Handbook. / Ed. A.Y. Zomaya. -McGraw-Hill, 1996. 25. Pfister, G. P. In Search of Clusters. Prentice Hall PTR, Upper Saddle River, NJ 1995. (2nd edn., 1998). 26. Wilkinson В., Allen M. Parallel programming. - Prentice Hall, 1999. 27. Xu, Z., Hwang, K. Scalable Parallel Computing Technology, Architecture, Programming. McGraw-Hill, Boston. 1998. Ресурсы Интернет 1. Designing and Building Parallel Programs 2. Foster I. Designing and Building Parallel Programs. - Addison Wesley, 1994.(http://www.mcs.anl.gov/dbpp) 3. Introduction to Parallel Computing (Teaching Course) (http://www.ece.nwu.edu/~choudhar/C58/) 4. Message Passing Interface (MPI) (Автор: Радыгин В.Ю.) 5. MPI: Message Passing Interface Standart (ps) 6. Parallel Programming Laboratory, University of Illinois, Urbana-Champaign (eng) 7. Parallel Programming with MPI by Peter Pacheco (eng) 8. Tutorial on MPI: The Message-Passing Interface William Gropp Mathematics and Computer Science Division Argonne National Laboratory Argonne, IL 60439 wwwunix.mcs.anl.gov/mpi/tutorial 9. Информационно-аналитические материалы по параллельным вычислениям (http://www.parallel.ru) 10. Информационно-аналитический центр по параллельным вычислениям (рус.) 11. Информационные материалы по MPI (http://www.mpi-forum.org) 12. Информационные материалы по OpenMP (http://www.openmp.org) 13. Информационные материалы рабочей группы IEEE по кластерным вычислениям (http://www.ieeetfcc.org) 14. Информационные материалы Центра компьютерного моделирования Нижегородского университета (http://www.software.unn.ac.ru/ccam) 15. Т-система - среда программирования с поддержкой автоматического динамического распараллеливания программ (рус.)