Введение в суперкомпьютерное моделирование

Преподаватель: к.ф.-м.н. А.В.Тимофеев

Аннотация:

Цель дисциплины – ознакомление студентов с технологиями параллельного программирования для дальнейшего использования при решении ресурсоёмких вычислительных задач математической физики и компьютерного моделирования на многопроцессорных вычислительных системах с графическими ускорителями.В рамках курса кроме основ работы на современных суперкомпьютерах рассматриваются принципы распараллеливания и способы ускорения расчётов и популярные технологии распараллеливания: технология MPI – для распараллеливания на системах с разделённой памятью, технологии Posix Threads, OpenMP, автоматическое распараллеливание для систем с общей памятью, технологии CUDA, OpenACC, OpenMP, OpenCL – для ускорения расчётов на графических ускорителях.


Цель дисциплины – ознакомление студентов с технологиями параллельного программирования для дальнейшего использования при решении ресурсоёмких вычислительных задач математической физики и компьютерного моделирования на многопроцессорных вычислительных системах.

Задачи дисциплины: 
• ознакомление с предметом, принципами и методами параллельного программирования;
• приобретение практических умений и навыков, необходимых для работы с многопроцессорными вычислительными системами;
• формирование умений и навыков для применения полученных знаний для решения ресурсоёмких вычислительных задач на многопроцессорных вычислительных системах.

Содержание:

1. Введение в суперкомпьютерное моделирование.        

Зачем нужны суперкомпьютеры? Задачи, требующие больших вычислений. Обзор рейтинга Тор-500. Метод классической молекулярной динамики и Монте-Крало: история, область применения, преимуществ, недостатки, положение среди других вычислительных методов. Примеры актуальных задач физики конденсированного вещества и неидеальной плазмы с демонстрацией результатов МД моделирования.

2. Введение в операционную систему Unix. Программирование для Bash.                 

Linux. Основные понятия. Навигация, основные команды. Создание, удаление и копирование файлов. Каталоги. Понятие учётной записи. Права доступа в Linux. Процессы в Linux. Понятие скриптов в Unix-системах. Интерпретаторы скриптов. Командная оболочка bash. Особенности работы. Программирование для Bash: переменные, ветвление, циклы. Арифметические операторы. Работа с файлами: перенаправление ввода и вывода, конвейерная обработка данных (pipes), регулярные выражения. Работа с аргументами командной строки. Оптимизация рутинных задач на примере .bashrc.

3. Компиляция и запуск программ. Вспомогательные программы.

Компиляция и запуск программ. Представление о работе компиляторов (для C/C++ – объектные файлы и библиотеки, заголовочные файлы, система сборки, зависимости). Текстовые редакторы (vim, …). Обзор основных возможностей gnuplot. Использование скриптов.

4. Введение в основы параллельного программирования с использованием технологии MPI.

Последовательная и параллельная модели программирования. Парадигмы параллельного программирования и соответствующие программные средства. Программная реализация MPI. Типовые схемы организации параллельных MPI-программ и их структура. Компиляция и запуск MPI-программ. Проблема поиска ошибок. Исследование вычислительного кластера с помощью средств MPI и Bash. Оценка производительности многопроцессорных вычислительных систем.                                                                                             

5. Основы MPI. Двухточечные и коллективные обмены.                              

Организация двухточечных обменов. Блокирующие операции: режимы, реализация в MPI, примеры. Стандартный обмен, обмен с буферизацией, обмен “по готовности”. Проблемы при организации двухточечных обменов. Неблокирующие операции. Широковещательная рассылка. Операции распределения и сбора данных, операция приведения. Синхронизация в параллельном программировании. Средства синхронизации в MPI.                                                                                   

6. Теоретические основы параллельных алгоритмов.                     

Теория функциональных устройств. Понятия загруженности, производительности и ускорения. Эффективность распараллеливания, законы Амдала. Информационная зависимость операций, графы исполнения. Параллельная форма алгоритма. Модель вычислений в виде графа “операции – операнды”. Основные показатели качества параллельных методов — ускорение, эффективность (efficiency), стоимость (cost) и масштабируемость (scalability) вычислений. Базовые принципы разработки параллельных алгоритмов. Основные понятия, все этапы создания и анализа параллельных алгоритмов.                                                                              

7. Параллельные методы умножения матрицы на вектор и на матрицу, решения систем линейных уравнений                     

Постановка задачи и последовательный алгоритм ее решения. Методы разделения матрицы между процессорами вычислительной системы, которые необходимы для параллельной реализации матричных операций. Три возможных подхода к параллельной реализации алгоритма умножения матрицы на вектор. Возможные подходы к параллельной реализации алгоритма умножения матриц и наиболее широко известные алгоритмы: алгоритм, основанный на ленточной схеме разделения данных, алгоритм Фокса (Fox) и алгоритм Кэннона (Cannon). Задача решения систем линейных уравнений. Необходимые определения и постановка задачи. Последовательный и параллельный варианты одного из прямых методов решения линейных систем общего вида – метода Гаусса. Описание последовательного и параллельного алгоритмов, реализующих итерационный метод сопряженных градиентов.

8. Основы параллелизации с помощью технологий OpenMP и PosixThreads, автоматическое распараллеливание.                              

Компиляция и запуск программ. Влияние компиляции на время выполнения программ. Принципы параллелизации. Потоки. OpenMP. Posix Threads. Автоматическое распараллеливание.                                                                                     

9. Основы параллелизации на графических ускорителях.

Архитектура графические ускорителей. Основные технологии параллелизации на графических ускорителях: CUDA, OpenCL, OpenMP, OpenACC. Компиляции и запуск программ. Синтаксис. Примеры.

Основная литература:                                      

1. Современные языки и технологии параллельного программирования [Текст] : учеб. пособие для вузов / В. П. Гергель ; Б-ка Нижегород.гос. ун-та им. Н. И. Лобачевского .— М. : Изд-во Моск. ун-та, 2012 .— 408 с.

2. Технологии параллельного программирования MPI и OpenMP [Текст] : учеб. пособие для вузов / А. С. Антонов ; Моск. гос. ун-т им. М. В. Ломоносова .— М. : Изд-во Моск. ун-та, 2012 .— 344 с.3. Технологии параллельного программирования [Текст] : учеб. пособие для вузов / С. А. Лупин, М. А. Посыпкин .— М. : Форум : Инфа-М, 2008 .— 205 с.