Вычисления на видеокартах
Графические процессоры (GPU) предоставляют тысячи параллельных вычислительных потоков, поэтому при правильно организованном коде ускорение по сравнению с CPU может достигать ×10–×100. Однако не каждый алгоритм выигрывает от такой архитектуры. На курсе мы разберём, когда GPU-ускорение оправдано, и как извлечь из него максимум производительности.
Помимо разбора архитектуры и синтаксиса GPU-кода (CUDA, OpenCL, Vulkan), курс нацелен на формирование мышления в парадигме массового параллелизма. Мы обсудим, как перенести на GPU даже такие казалось бы линейные алгоритмы как merge-sort и добиться ускорения вплоть до ×100.
API-взаимодействие CPU с GPU мы обсудим лишь обзорно — в практических заданиях его возьмет на себя обёртка-библиотека. Главный акцент будет на коде, исполняемом непосредственно на видеокарте, а не на низкоуровневом управлении копированием памяти и запуском кернелов.
Базовое представление о курсе можно получить посмотрев открытую лекцию «Видеокарты: что они могут? Могут ли они хоть что-то?», однако на курсе темы разбираются гораздо плавнее и глубже, сопровождаются практическими заданиями, а завершает обучение устный экзамен.
Примеры алгоритмов, которые мы реализуем в модели массового параллелизма:
- prefix-sum (scan)
- merge-sort за вместо
- умножение матриц (ядро большинства AI-фреймворков)
- построение BVH-дерева (фундамент современного real-time Ray Tracing)
Пререквизиты:
- умение писать простой C++-код на уровне работы с арифметикой указателей
- понимание асимптотического анализа, базовых алгоритмов и структур данных
- базовые знания многопоточности
- для выполнения заданий достаточно любого ноутбука (видеокарта не требуется, можно тестировать на процессоре)
- для выполнения заданий рекомендуется Ubuntu или Windows, на MacOS потребуются дополнительные усилия
Также на лекциях будут лилипуты и клоуны!
Занятия
12 лекцийЛекция 1
Архитектура CPU, история GPU и GPGPU, введение в OpenCL API
Лекция 2
Архитектура GPU, модель массового параллелизма
Лекция 3
Локальная память, суммирование массива
Лекция 4
Транспонирование и умножение матриц
Лекция 5
Префиксные суммы, scan, битовая арифметика
Лекция 6
Bitonic sort, radix sort
Лекция 7
Merge sort, Coarse-to-Fine схема, Patch Match, Look Up Tables
Лекция 8
Разреженные матрицы, Системы Непересекающихся Множеств
Лекция 9
Real-time построение BVH для Ray Tracing
Лекция 10
Signed Distance Functions
Лекция 11
Программная растеризация
Лекция 12
Как работает Nanite в Unreal Engine 5

