Параллельное программирование с использованием OpenMP и MPI

Курс даст базовые знания по многоядерным архитектурам, представит наиболее популярную технологию распараллеливания программ для многопроцессорных вычислительных систем с общей памятью и суперкомпьютеров OpenMP.

Параллельное программирование с использованием OpenMP и MPI
Бесплатно
10 недель10 недель
Сертификат гос. образцаСертификат гос. образца
РусскийРусский
Томский государственный университет
Открытое Образование

Описание:

Потребность решения сложных прикладных задач с большим объемом вычислений и принципиальная ограниченность максимального быстродействия «классических» – по схеме фон Неймана – ЭВМ привели к появлению многопроцессорных вычислительных систем (МВС) или суперкомпьютеров.

Широкое распространение параллельные вычисления приобрели с переходом компьютерной индустрии на массовый выпуск многоядерных процессоров с векторными расширениями. В настоящие время практически все устройства – от карманных гаджетов и до самых мощных суперкомпьютеров – оснащены многоядерными процессорами. И если вы пишете последовательную программу, не применив распределение работы между разными ядрами центрального процессора и не проведя векторизацию, то вы используете только часть вычислительных возможностей центрального процессора.

Курс познакомит с основными архитектурами МВС, с двумя стандартами (OpenMP и MPI), позволяющими писать параллельные программы для систем с общей и распределенной памятью. На простых примерах будут разобраны основные конструкции и способы распределения работы. Выполнение практических заданий позволит приобрести практические навыки создания параллельных программ.

В результате освоения курса студент должен уметь:

  1. Использовать особенности различных архитектур высокопроизводительных вычислительных систем;
  2. Создавать параллельные программы с использованием OpenMP и MPI;
  3. Используя полученные знания и навыки, ускорить работу существующих последовательных программ, создав на их основе параллельные программы.

Для изучения данного курса требуются: опыт написания программ на любом языке, знание синтаксиса языка программирования C/С++, знание среды разработки MS Visual Studio. Курс ориентирован на студентов старших курсов бакалавриата и магистрантов. 

Программа курса:

Раздел 1. Введение в параллельный мир

1.1. История развития параллелизма в архитектуре ЭВМ

1.2. Иерархическая организация памяти в компьютере

1.3. Основные архитектуры многопроцессорных вычислительных систем. Их классификация

1.4. Обзор задач, требующих использования СуперЭВМ

1.5. Инструменты создания параллельных программ

Раздел 2. Основы OpenMP

2.1. Особенности программирования для систем с общей памятью. Понятие процесса, потока и многопоточности

2.2. Технология OpenMP, особенности и ее компоненты

2.3. Задание параллельной области и опции, влияющие на ее выполнение

2.4. Модель памяти. Классы переменных в OpenMP

2.5. Режимы выполнения многопоточных программ. Вложенный параллелизм

Раздел 3. Директивы распределения работы и синхронизации работы

3.1. Распараллеливание выполнения циклов

3.2. Распределение нескольких структурных блоков между потоками

3.3. Распределение работы на основе независимых задач

3.4. Синхронизация выполнения различных потоков. Простые директивы

3.5. Синхронизация выполнения различных потоков. Замки

Раздел 4. Векторные вычисления с помощью OpenMP0

4.1. Что такое векторизация и зачем она нужна

4.2. Векторизация исполняемого кода для современных процессоров

4.3. Новые возможности в стандарте OpenMP 4.0

4.4. Примеры использования векторизации

Раздел 5. Анализ и оптимизация программ с использованием современных программных пакетов

5.1. Основные опции компилятора Intel. Автоматическое распараллеливание

5.2. Основные возможности Intel Parallel Studio

5.3. Поиск ошибок работы с памятью с использованием Intel® Parallel Inspector

5.4. Профилирование программ с использованием Intel® Parallel Amplifier

Раздел 6. Системы с распределённой памятью. Основы MPI

6.1. Основные понятия модели передачи сообщений, MPI среди других средств разработки параллельных программ

6.2. Основные понятия и определения, состав MPI. Синтаксис функций MPI

6.3. Первая параллельная программа с использованием MPI

6.4. Ускорение работы параллельной программы

6.5. О построении параллельных алгоритмов

Раздел 7. Прием и передача сообщений между отдельными процессами

7.1. Обзор двухточечных обменов сообщениями

7.2. Блокирующие обмены

7.3. Неблокирующие обмены

7.4. Параллельные алгоритмы суммирования

7.5. Примеры параллельных программ, демонстрирующие использование функций MPI, изученных в разделе 7

Раздел 8. Коллективные операции

8.1. Обзор коллективных операций. Широковещательная рассылка

8.2. Функции сбора данных со всех процессов

8.3. Функции распределения данных по всем процессам

8.4. Функции редукции

8.5. Примеры параллельных программ, демонстрирующие использование функций MPI, изученных в разделе 8

Раздел 9. Производные типы данных. Группы и коммуникаторы

9.1. Создание и использование производных типов данных

9.2. Создание групп и коммуникаторов

9.3. Виртуальные топологии. Декартова топология. Организация пересылок данных в декартовой топологии

9.4. Виртуальные топологии. Топология графа

9.5. Примеры параллельных программ, демонстрирующие использование функций MPI, изученных в разделе 9

Раздел 10. Итоговая аттестация