Факультативный курс «Параллельные вычисления»: первое занятие
МФТИ — Московский физико-технический институт ·
9 сентября начнутся занятия факультативного курса «Методы массивно-параллельного программирования в среде CUDA для решения задач теоретической и математической физики». Параллельные вычисления — эффективный инструмент для численного моделирования в математике или теоретической физике. Лектор — Евгений Евгеньевич Перепёлкин, доктор физико-математических наук, профессор кафедры квантовой статистики и теории поля физического факультета МГУ. Программа рассчитана на студентов 3 курса и старше, но можно записываться и на 1 — 2 курсе, если вы уверенно чувствуете себя в информатике. Анкета для регистрации на курс Первое занятие состоится 9 сентября в 208 УПМ. Начало — в 18:30. Занятия будут проходить еженедельно по средам. О курсе Курс по технологии NVIDIA CUDA предназначен для разработчиков и исследователей, применяющих параллельные вычисления. Курс лекций рассчитан на широкий круг студентов, аспирантов, преподавателей ВУЗов и специалистов в различных областях математического моделирования и теоретической физики, для которых программирование не является основной специальностью, а используется ими как дополнительный инструмент в численном моделировании исследуемых задач. В курсе изложены базовые знания, необходимые, чтобы быстро и эффективно начать писать программы на графическом процессоре (GPU) без специальной подготовки в области программирования. Содержание лекций Лекция 1 Проблемы повышения частоты центральных процессоров (CPU) и перехода на низших техпроцесс. Графический процессор как массивно-параллельная архитектура. Тандем CPU-GPU. Задачи, решаемые на GPU. Гибридная модель вычислений. Типы вычислительных архитектур. Архитектура графического процессора (GPU). Compute Capability видеокарты. Высокоскоростное внутреннее соединение NVIDIA NVLink обмена данными между GPUs/CPU. Лекция 2 Программная модель CUDA. Гибридная модель программного кода. Свободные параллельные библиотеки на GPU. Компиляция кода на GPU. Средства разработки MS Visual Studio, NVIDIA Profiler, NVIDIA Parallel Nsight. Понятие потока, блока, сети блоков. Функция – ядро как параллельный код на GPU. Иерархия памяти на GPU. Регистры и локальная память. Register spilling. L1 и Read Only Data Cache. Лекция 3 Глобальная память и L1, L2-кэш. Шаблон работы с глобальной памятью. Простейший алгоритм параллельного вычисления значений функции на GPU. Сравнение времени копирования данных между «host» / «device» и времени вычислений на GPU. Объединение запросов при доступе в глобальную память (Coalescing). Использование L1 cash и _ldg при работе с глобальной памятью. Массивы с выравниванием. Двумерные массивы в глобальной памяти GPU. Пример параллельного алгоритма перемножения матриц. Пример параллельного алгоритма решения системы линейных алгебраических уравнений (СЛАУ). Оптимизация доступа в глобальную память в алгоритме решения СЛАУ. Параллельный алгоритм решения задачи многих тел (N-body) с использованием глобальной памяти. Гравитационное и электрическое взаимодействие. Оценка эффективности. Лекция 4 Pinned-память. Оптимизация копирования данных с «host» на «device» с использованием pinned-памяти. Использование pinned-памяти в алгоритме решения СЛАУ. Понятие CUDA-потока (CUDA-Streams). Асинхронное выполнение функции-ядра и асинхронное копирование данных между «host» и «device». Пример использование CUDA-потоков и pinned-памяти в алгоритме обработке массивов данных. Оценка времени копирования данных, вычислений на GPU, загрузки шины PCI-E. Лекция 5 Разделяемая память (shared memory) и L1-cache. Шаблон работы с разделяемой памятью. Параллельный алгоритм решения задачи многих тел (N-body) с использованием разделяемой памяти. Понятие банков. Понятие банк-конфликтов. Параллельный алгоритм перемножения матриц с использованием разделяемой памяти (оптимизация банк-конфликтов, параллелизм по нитям (TLP), параллелизм по инструкциям (ILP) ). Алгоритм параллельной редукции с использованием разделяемой памяти. Оптимизация алгоритма редукции (ветвления в варпах (warps), банк-конфликты, развертка циклов). Лекция 6 Статические переменные. Константная память. Текстурная память. Конвейеры текстурной памяти: фильтрация, переадресация. Нормализованные и целочисленные координаты. Параллельный алгоритм вычисление свертки функций с использованием текстурной и разделяемой памяти в задачах обработки сигнала (изображения). Вычисления конечно-разностных производных. Интерполяция конечно-разностной функции в меж-узловых точках при переходе из одной системы координат в другую. Лекция 7 Параллельный алгоритм решения системы нелинейных алгебраических уравнений. Непрерывный аналог метода Ньютона. Понятие производной Фреше. Оптимизация доступа в память. Уравнения гидро-газодинамики Навье-Стокса. Параллельный алгоритм численного моделирования течения несжимаемой жидкости на GPU. Схема расщепления, метод прогонки, оптимизация доступа в глобальную память. Оценка производительности. Лекция 8 Стандарт OpenACC для кросс-платформенных приложений. Описание стандарта OpenACC. Основные директивы OpenACC. Процесс компиляции приложения в OpenACC (оценка эффективности распараллеливания). Сравнение эффективности параллельных реализаций на CPU OpenMP, на GPU OpenACC и на GPU CUDA: обработка данных, перемножение матриц, задача многих тел. Лекция 9 Метод массивно-параллельной архитектуры GPU в задачах моделирования динамики пучка в ускорительной физике. Параллельные алгоритмы трассировки частиц, оценки потерь частиц (Ray Tracing), оценки эффекта пространственного заряда пучка. Примеры оптимизация параметров циклотрона: AVF RIKEN Cyclotron (Japan). Примеры оптимизация параметров циклотронв: VINCY Cyclotron (Serbia), Custom Cyclotron (USA). Уравнение Кардара-Паризи-Жанга. Скейленговая гипотеза. Скейленговая функция и скейлинговый параметр. TASEP (Total Asymmetric Exclusion Process). Параллельный алгоритм на GPU оценки скейленговой функции и скейленгового фпараметра для TASEP. Задача магнитостатики. Постановка задачи, численный метод и параллельный алгоритм реализации на GPU. Моделирование распределения магнитного поля на примере установки ATLAS LHC CERN. Лекция 10 Вычисления в режиме Multi-GPU. Использование нескольких графических процессоров GPU на одном узле. Обмен данными между GPU (Direct 2.0). Использование интерфейсов NVLink и PCI-E. Унифицированное адресное пространство (Unified Virtual Addressing). Оптимизация нагрузки между GPU. Скачать программу курса
9 сентября начнутся занятия факультативного курса «Методы массивно-параллельного программирования в среде CUDA для решения задач теоретической и математической физики». Параллельные вычисления — эффективный инструмент для численного моделирования в математике или теоретической физике. Лектор — Евгений Евгеньевич Перепёлкин, доктор физико-математических наук, профессор кафедры квантовой статистики и теории поля физического факультета МГУ. Программа рассчитана на студентов 3 курса и старше, но можно записываться и на 1 — 2 курсе, если вы уверенно чувствуете себя в информатике. Анкета для регистрации на курс Первое занятие состоится 9 сентября в 208 УПМ. Начало — в 18:30. Занятия будут проходить еженедельно по средам. О курсе Курс по технологии NVIDIA CUDA предназначен для разработчиков и исследователей, применяющих параллельные вычисления. Курс лекций рассчитан на широкий круг студентов, аспирантов, преподавателей ВУЗов и специалистов в различных областях математического моделирования и теоретической физики, для которых программирование не является основной специальностью, а используется ими как дополнительный инструмент в численном моделировании исследуемых задач. В курсе изложены базовые знания, необходимые, чтобы быстро и эффективно начать писать программы на графическом процессоре (GPU) без специальной подготовки в области программирования. Содержание лекций Лекция 1 Проблемы повышения частоты центральных процессоров (CPU) и перехода на низших техпроцесс. Графический процессор как массивно-параллельная архитектура. Тандем CPU-GPU. Задачи, решаемые на GPU. Гибридная модель вычислений. Типы вычислительных архитектур. Архитектура графического процессора (GPU). Compute Capability видеокарты. Высокоскоростное внутреннее соединение NVIDIA NVLink обмена данными между GPUs/CPU. Лекция 2 Программная модель CUDA. Гибридная модель программного кода. Свободные параллельные библиотеки на GPU. Компиляция кода на GPU. Средства разработки MS Visual Studio, NVIDIA Profiler, NVIDIA Parallel Nsight. Понятие потока, блока, сети блоков. Функция – ядро как параллельный код на GPU. Иерархия памяти на GPU. Регистры и локальная память. Register spilling. L1 и Read Only Data Cache. Лекция 3 Глобальная память и L1, L2-кэш. Шаблон работы с глобальной памятью. Простейший алгоритм параллельного вычисления значений функции на GPU. Сравнение времени копирования данных между «host» / «device» и времени вычислений на GPU. Объединение запросов при доступе в глобальную память (Coalescing). Использование L1 cash и _ldg при работе с глобальной памятью. Массивы с выравниванием. Двумерные массивы в глобальной памяти GPU. Пример параллельного алгоритма перемножения матриц. Пример параллельного алгоритма решения системы линейных алгебраических уравнений (СЛАУ). Оптимизация доступа в глобальную память в алгоритме решения СЛАУ. Параллельный алгоритм решения задачи многих тел (N-body) с использованием глобальной памяти. Гравитационное и электрическое взаимодействие. Оценка эффективности. Лекция 4 Pinned-память. Оптимизация копирования данных с «host» на «device» с использованием pinned-памяти. Использование pinned-памяти в алгоритме решения СЛАУ. Понятие CUDA-потока (CUDA-Streams). Асинхронное выполнение функции-ядра и асинхронное копирование данных между «host» и «device». Пример использование CUDA-потоков и pinned-памяти в алгоритме обработке массивов данных. Оценка времени копирования данных, вычислений на GPU, загрузки шины PCI-E. Лекция 5 Разделяемая память (shared memory) и L1-cache. Шаблон работы с разделяемой памятью. Параллельный алгоритм решения задачи многих тел (N-body) с использованием разделяемой памяти. Понятие банков. Понятие банк-конфликтов. Параллельный алгоритм перемножения матриц с использованием разделяемой памяти (оптимизация банк-конфликтов, параллелизм по нитям (TLP), параллелизм по инструкциям (ILP) ). Алгоритм параллельной редукции с использованием разделяемой памяти. Оптимизация алгоритма редукции (ветвления в варпах (warps), банк-конфликты, развертка циклов). Лекция 6 Статические переменные. Константная память. Текстурная память. Конвейеры текстурной памяти: фильтрация, переадресация. Нормализованные и целочисленные координаты. Параллельный алгоритм вычисление свертки функций с использованием текстурной и разделяемой памяти в задачах обработки сигнала (изображения). Вычисления конечно-разностных производных. Интерполяция конечно-разностной функции в меж-узловых точках при переходе из одной системы координат в другую. Лекция 7 Параллельный алгоритм решения системы нелинейных алгебраических уравнений. Непрерывный аналог метода Ньютона. Понятие производной Фреше. Оптимизация доступа в память. Уравнения гидро-газодинамики Навье-Стокса. Параллельный алгоритм численного моделирования течения несжимаемой жидкости на GPU. Схема расщепления, метод прогонки, оптимизация доступа в глобальную память. Оценка производительности. Лекция 8 Стандарт OpenACC для кросс-платформенных приложений. Описание стандарта OpenACC. Основные директивы OpenACC. Процесс компиляции приложения в OpenACC (оценка эффективности распараллеливания). Сравнение эффективности параллельных реализаций на CPU OpenMP, на GPU OpenACC и на GPU CUDA: обработка данных, перемножение матриц, задача многих тел. Лекция 9 Метод массивно-параллельной архитектуры GPU в задачах моделирования динамики пучка в ускорительной физике. Параллельные алгоритмы трассировки частиц, оценки потерь частиц (Ray Tracing), оценки эффекта пространственного заряда пучка. Примеры оптимизация параметров циклотрона: AVF RIKEN Cyclotron (Japan). Примеры оптимизация параметров циклотронв: VINCY Cyclotron (Serbia), Custom Cyclotron (USA). Уравнение Кардара-Паризи-Жанга. Скейленговая гипотеза. Скейленговая функция и скейлинговый параметр. TASEP (Total Asymmetric Exclusion Process). Параллельный алгоритм на GPU оценки скейленговой функции и скейленгового фпараметра для TASEP. Задача магнитостатики. Постановка задачи, численный метод и параллельный алгоритм реализации на GPU. Моделирование распределения магнитного поля на примере установки ATLAS LHC CERN. Лекция 10 Вычисления в режиме Multi-GPU. Использование нескольких графических процессоров GPU на одном узле. Обмен данными между GPU (Direct 2.0). Использование интерфейсов NVLink и PCI-E. Унифицированное адресное пространство (Unified Virtual Addressing). Оптимизация нагрузки между GPU. Скачать программу курса