Курс основывается на материалах NVIDIA GPU Teaching Kit разработанных коллективом автором из University of Illinois. Данный курс включает вводный и продвинутый материал по теме параллельных вычислений. Целью курса является научиться программировать гетерогенные (CPU и GPU) параллельные компьютерные системы и достигать:
- Высокой производительности и энергоэффективности,
- Функциональности и сопровождаемости,
- Возможности масштабирования для будущих версий,
- Переносимости на другие устройства.
Техническая составляющая курса включает изучение API параллельного программирования, инструментов и техник программирования, принципов и паттернов параллельных алгоритмов, особенностей и ограничений архитектуры процессора. Практические задания курса используют онлайн-курсы NVIDIA DEEP LEARNING INSTITUTE (DLI) и другие задания разворачиваемые на платформе AWS.
- Введение (1.1) [youtube]
- Введение в гетерогенные параллельные вычисления (1.2) [youtube]
- Переносимость и масштабируемость в гетерогенных параллельных вычислениях (1.3) [youtube]
- CUDA C vs. Thrust vs. CUDA Libraries (2.1) [youtube]
- API-функции для выделения памяти и перемещения данных (2.2) [youtube]
- Потоки и функции ядра (2.3) [youtube]
- Введение в CUDA Toolkit (2.4) [youtube]
- Nsight вычисления и NSight системы (2.5) [youtube]
- Единая память (2.6) [youtube]
- Kernel-Based SPMD параллельное программирование (3.1) [youtube]
- Многомерная конфигурация ядра (3.2) [youtube]
- Color-to-Grayscale пример обработки изображения (3.3) [youtube]
- Пример размытия изображения (3.4) [youtube]
- Планирование потоков (3.5) [youtube]
- Память в CUDA (4.1) [youtube]
- Блочные параллельные алгоритмы (4.2) [youtube]
- Блочное умножение матриц (4.3) [youtube]
- Ядро блочного перемножения матриц (4.4) [youtube]
- Обработка матриц произвольного размера в блочных алгоритмах (4.5) [youtube]
- Warps и SIMD железо (5.1) [youtube]
- Влияние дивергенции управления на производительность (5.2) [youtube]
- Пропускная способность DRAM (6.1) [youtube]
- Обьединение запросов к памяти в CUDA (6.2) [youtube]
- Гистограмма (7.1) [youtube]
- Введение в Data Races (7.2) [youtube]
- Атомарные операции в CUDA (7.3) [youtube]
- Производительность атомарных операций (7.4) [youtube]
- Техника приватизации для увеличения пропускной способности (7.5) [youtube]
- Свертка (8.1) [youtube]
- Блочная свертка (8.2) [youtube]
- Граничные условия (8.3) [youtube]
- Анализ повторного использования данных в блочной свертке (8.4) [youtube]
- Паралельное сокращение (9.1) [youtube]
- Базовое ядро редукции (9.2) [youtube]
- Лучшее ядро редукции (9.3) [youtube]
- Сумма префикса (10.1) [youtube]
- Неэффективное ядро сканирования (10.2) [youtube]
- Эффективное пареллельное ядро сканирования (10.3) [youtube]
- Подробнее о параллельном сканировании (10.4) [youtube]
- Precision and Accuracy для данных с плавающей точкой (12.1) [youtube]
- Числовая стабильность (12.2) [youtube]
- GPU как часть архитектуры ПК (13.1) [youtube]
- Закрепленная память (14.1) [youtube]
- Параллелизм задач в CUDA (14.2) [youtube]
- Перекрытие передачи данных с вычислением (14.3) [youtube]
- Единая память CUDA (14.4) [youtube]
- Введение в гетерогенные супервычисления и MPI (18.1) [youtube]
- Введение в программирование MPI-CUDA (18.2) [youtube]
- Модель параллелизма данных OpenCL (20.1) [youtube]
- Архитектура устройств OpenCL (20.2) [youtube]
- Хостовый код OpenCL (20.3) [youtube]
- Введение в OpenACC (21.1) [youtube]
- Тонкости OpenACC (21.2) [youtube]
Дополнительный материал по теме курса: