Курс даст базовые знания по многоядерным архитектурам, представит наиболее популярную технологию распараллеливания программ для многопроцессорных вычислительных систем с общей памятью и суперкомпьютеров OpenMP.
О курсе
Широкое распространение параллельные вычисления приобрели с переходом компьютерной индустрии на массовый выпуск многоядерных процессоров с векторными расширениями. В настоящие время практически все устройства – от карманных гаджетов и до самых мощных суперкомпьютеров – оснащены многоядерными процессорами. И если вы пишете последовательную программу, не применив распределение работы между разными ядрами центрального процессора и не проведя векторизацию, то вы используете только часть вычислительных возможностей центрального процессора.
Курс познакомит с основными архитектурами МВС, с двумя стандартами (OpenMP и MPI), позволяющими писать параллельные программы для систем с общей и распределенной памятью. На простых примерах будут разобраны основные конструкции и способы распределения работы. Выполнение практических заданий позволит приобрести практические навыки создания параллельных программ.
Формат
- тематические видеолекции;
- материалы для самостоятельного изучения к каждому разделу курса;
- список литературы и дополнительных материалов по всему курсу;
- список необходимого программного обеспечения и инструкции по его установке;
- практические задания на программирование по соответствующим темам курса;
- тестовые задания на оценку (по 8–13 вопросов к каждому разделу курса).
Финальная оценка результатов обучения формируется на основе данных еженедельного контроля и итогового задания.
Информационные ресурсы
- Официальный сайт OpenMP ARB
- Спецификация OpenMP 4.0
- Примеры использования директив и функций с официального сайта
- Антонов А.С. Параллельное программирование с использованием технологии OpenMP.
- Материалы курса лекций «Параллельное программирование для многопроцессорных систем с общей и распределенной памятью», читаемого на механико-математическом факультете Томского государственного университета.
- Букатов А.А. Программирование многопроцессорных вычислительных систем / А.А. Букатов, В.Н. Дацюк, А.И. Жегуло. – Ростов н/Д: Издательство ООО «ЦВВР», 2003. – 208 с.
- Старченко А.В. Методы параллельных вычислений: учебник для вузов / А.В. Старченко, В.Н. Берцун. – Томск: Издательство Томского университета, 2013. – 224 с. (xn--80atcxa4d)
- Практикум по методам параллельных вычислений: учебник для вузов / А.В. Старченко, Е.А. Данилкин, В.И. Лаева [и др.]; под ред. А. В. Старченко. – М.: Издательство Моск. университета, 2010. – 199 с.
- Информационно аналитический центр по параллельным вычислениям
- Интернет-центр системы образовательных ресурсов в области суперкомпьютерного образования
- Список 50 наиболее мощных компьютеров СНГ
Требования
Программа курса
Раздел 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. Итоговая аттестация
Результаты обучения
- Использовать особенности различных архитектур высокопроизводительных вычислительных систем;
- Создавать параллельные программы с использованием OpenMP и MPI;
- Используя полученные знания и навыки, ускорить работу существующих последовательных программ, создав на их основе параллельные программы.
Формируемые компетенции
Знать:
- Основные понятия параллельного программирования, структуру, методы и функции параллельных технологий программирования OpenMP, MPI.
- Возможные сферы применения параллельных технологий программирования при решении практических задач фундаментальной и прикладной математики
Уметь
- Разрабатывать программы для решения задач прикладного характера из различных разделов прикладной математики с использованием параллельных технологий.
Владеть
- Алгоритмами и эффективными технологиями параллельного программирования на основе стандарта OpenMP и MPI.
(03.04.02 – Физика)
Знать:
- Основные понятия параллельного программирования, структуру, методы и функции параллельных технологий программирования OpenMP, MPI.
- Возможные сферы применения параллельных технологий программирования при решении практических задач фундаментальной и прикладной физики
Владеть:
- базовыми знаниями и навыками управления информацией посредством современных компьютерных технологий для решения исследовательских
- навыками исследований с помощью современной аппаратуры и информационных технологий
(09.04.04 - Программная инженерия)
Знать:
- Основные понятия параллельного программирования, структуру, методы и функции параллельных технологий программирования OpenMP, MPI
Уметь:
- Уметь выбирать подходящие параллельные методы, алгоритмы и подходы для решения задачи. Разрабатывать программы для решения задач прикладного характера из различных разделов прикладной математики с использованием параллельных технологий.
Владеть:
- Способностью к освоению современных информационных технологий в области параллельного программирования. Методами и эффективными технологиями параллельного программирования на основе стандарта OpenMP и MPI
(02.04.02 - Фундаментальная информатика и информационные технологии)
Знать
- Основные понятия параллельного программирования, структуру, методы и функции параллельных технологий программирования OpenMP, MPI
Уметь
- Уметь выбирать подходящие параллельные методы, алгоритмы и подходы для решения задачи/ Разрабатывать программы для решения задач прикладного характера из различных разделов прикладной математики с использованием параллельных технологий.
Владеть
- Способностью к освоению современных информационных технологий в области параллельного программирования. Методами и эффективными технологиями параллельного программирования на основе стандарта OpenMP и MPI.
Преподаватели

Богословский Николай Николаевич,
кандидат физико-математических наук,
доцент кафедры вычислительной математики и компьютерного моделирования мех.-мат. фак-та НИ ТГУ

Данилкин Евгений Александрович,
кандидат физико-математических наук,
доцент кафедры вычислительной математики и компьютерного моделирования мех.-мат. фак-та НИ ТГУ