Осень 2025
Курс
ПОМИ РАН

Вычисления на видеокартах

Графические процессоры (GPU) предоставляют тысячи параллельных вычислительных потоков, поэтому при правильно организованном коде ускорение по сравнению с CPU может достигать ×10–×100. Однако не каждый алгоритм выигрывает от такой архитектуры. На курсе мы разберём, когда GPU-ускорение оправдано, и как извлечь из него максимум производительности.

Помимо разбора архитектуры и синтаксиса GPU-кода (CUDA, OpenCL, Vulkan), курс нацелен на формирование мышления в парадигме массового параллелизма. Мы обсудим, как перенести на GPU даже такие казалось бы линейные алгоритмы как merge-sort и добиться ускорения вплоть до ×100.

API-взаимодействие CPU с GPU мы обсудим лишь обзорно — в практических заданиях его возьмет на себя обёртка-библиотека. Главный акцент будет на коде, исполняемом непосредственно на видеокарте, а не на низкоуровневом управлении копированием памяти и запуском кернелов.

Базовое представление о курсе можно получить посмотрев открытую лекцию «Видеокарты: что они могут? Могут ли они хоть что-то?», однако на курсе темы разбираются гораздо плавнее и глубже, сопровождаются практическими заданиями, а завершает обучение устный экзамен.

Примеры алгоритмов, которые мы реализуем в модели массового параллелизма:

  • prefix-sum (scan)
  • merge-sort за O(N)\mathcal{O}(N) вместо O(NlogN)\mathcal{O}(N \cdot \log N)
  • умножение матриц (ядро большинства AI-фреймворков)
  • построение BVH-дерева (фундамент современного real-time Ray Tracing)

Пререквизиты:

  • умение писать простой C++-код на уровне работы с арифметикой указателей
  • понимание асимптотического анализа, базовых алгоритмов и структур данных
  • базовые знания многопоточности
  • для выполнения заданий достаточно любого ноутбука (видеокарта не требуется, можно тестировать на процессоре)
  • для выполнения заданий рекомендуется Ubuntu или Windows, на MacOS потребуются дополнительные усилия

Также на лекциях будут лилипуты и клоуны!

Занятия

12 лекций

Лекция 1

Архитектура CPU, история GPU и GPGPU, введение в OpenCL API

Expand icon
08.09.2025 / ПН
18:00-19:30
Лекция
avatar
Полярный НиколайПреподаватель

Архитектура CPU, история GPU и GPGPU, введение в OpenCL API

На первой лекции курса обсудим:

  • какой уровень C++ и знания алгоритмов ожидается от студентов
  • в общих чертах архитектуру CPU чтобы было с чем дальше сравнивать GPU
  • Instruction Level Parallelism, Branch Prediction, Cache Lines, Simultaneous Multithreading, Hyper-Threading
  • обсудим как работает эксплуатация уязвимостей Meltdown/Spectre
  • обсудим SIMD, SSE, AVX intrinsics на примере фрактала Мандельброта
  • посмотрим на историю видеокарт и как они пришли от графических задач GPU к задачам вычислений общего назначения GPGPU
  • введение в OpenCL API и взглянем на первое домашнее задание на https://github.com/GPGPUCourse

Лекция 2

Архитектура GPU, модель массового параллелизма

Expand icon
15.09.2025 / ПН
18:00-19:30
Лекция
avatar
Полярный НиколайПреподаватель

Архитектура GPU, модель массового параллелизма

  • Архитектура GPU (на контрасте с CPU)
  • Модель массового параллелизма
  • code divergence, coalesced memory access
  • latency hiding, occupancy, registers pressure/spilling
  • Speed of Light (SoL) анализ, профилировщики
  • Синтаксис кернелов на OpenCL, CUDA, Vulkan

Лекция 3

Локальная память, суммирование массива

Expand icon
22.09.2025 / ПН
18:00-19:30
Лекция
avatar
Полярный НиколайПреподаватель

Локальная память, суммирование массива

  • Напоминание ментальной модели
  • Local Memory, barrier, bank conflicts
  • Суммирование чисел, reduction

Лекция 4

Транспонирование и умножение матриц

Expand icon
29.09.2025 / ПН
18:00-19:30
Лекция
avatar
Полярный НиколайПреподаватель

Транспонирование и умножение матриц

  • Транспонирование через local memory (bank conflicts)
  • Умножение матриц через local memory
  • Tensor Cores, WMMA
  • Оптимизации fp8 DeepSeek
  • Умножение матриц Методом Штрассена и Виноградова

Лекция 5

Префиксные суммы, scan, битовая арифметика

Expand icon
06.10.2025 / ПН
18:00-19:30
Лекция
avatar
Полярный НиколайПреподаватель

Префиксные суммы, scan, битовая арифметика

  • Битовая арифметика
  • Префиксная сумма (Scan)
  • Как отлаживать
  • OpenCL/CUDA самописный эмулятор

Лекция 6

Bitonic sort, radix sort

Expand icon
13.10.2025 / ПН
18:00-19:30
Лекция
avatar
Полярный НиколайПреподаватель

Bitonic sort, radix sort

  • Результаты соревнования по умножению матриц
  • Bitonic sort (битоническая сортировка)
  • Radix sort (поразрядная сортировка)
  • Как отлаживать

Лекция 7

Merge sort, Coarse-to-Fine схема, Patch Match, Look Up Tables

Expand icon
20.10.2025 / ПН
18:00-19:30
Лекция
avatar
Полярный НиколайПреподаватель

Merge sort, Coarse-to-Fine схема, Patch Match, Look Up Tables

  • Merge sort на GPU (merge path)
  • Coarse to Fine схема оптимизаций
  • Patch Match алгоритм ретуширования фотографий и построения карт глубины, оптимизация под видеокарты
  • Look Up Tables (LUT): поиск соседей в октодереве, маршировка кубов для реконструкции поверхности

Лекция 8

Разреженные матрицы, Системы Непересекающихся Множеств

Expand icon
27.10.2025 / ПН
18:00-19:30
Лекция
avatar
Полярный НиколайПреподаватель

Разреженные матрицы, Системы Непересекающихся Множеств

  • Разреженные матрицы
  • COO, CSR, CSC
  • ELL, DIA, HYB
  • Система Непересекающихся Множеств (СНМ, Disjoint Set)

Лекция 9

Real-time построение BVH для Ray Tracing

Expand icon
10.11.2025 / ПН
18:00-19:30
Лекция
avatar
Полярный НиколайПреподаватель

Real-time построение BVH для Ray Tracing

  • Ray Tracing, Bounded Volume Hierarchy, AABB
  • Z curve, Morton code
  • Linear BVH (LBVH), H-PLOC
  • Как читать научные статьи

Лекция 10

Signed Distance Functions

Expand icon
17.11.2025 / ПН
18:00-19:30
Лекция
avatar
Симиютин БорисПреподаватель

Signed Distance Functions

  • Signed Distance Functions
  • shadertoy.com
  • Ray marching
  • Применения в физических симуляциях, глобальном освещении и навигации роботов

Лекция 11

Программная растеризация

Expand icon
24.11.2025 / ПН
18:00-19:30
Лекция
avatar
Полярный НиколайПреподаватель

Программная растеризация

  • Вершинный и фрагментный шейдеры
  • Растеризация в OpenGL/Vulkan
  • Алгоритм Брезенхэма
  • Проект Larrabee
  • Проект cudaraster

Лекция 12

Как работает Nanite в Unreal Engine 5

Expand icon
01.12.2025 / ПН
18:00-19:30
Лекция
avatar
Полярный НиколайПреподаватель

Как работает Nanite в Unreal Engine 5

Лекция будет интересна если вам нравится компьютерная графика, вычислительная геометрия, алгоритмическая инженерия или вас вдохновляет когда кто-то поставил себе священную цель, пошел за мечтой, не растерялся и бескомпромиссно решил задачу "как рисовать высокополигональную геометрию с высоким FPS".

Представьте: gamedev-команда Babazaki разрабатывает игру. 3D-моделлеры создали ПОТРЯСАЮЩИЙ воображение мир: скалы, пещеры, замки, ЦИКЛОПИЧЕСКИХ РАЗМЕРОВ ДЕРЕВО.

Разработчики загрузили это на видеокарту, попытались отрисовать, видеокарта отрисовала 1 FPS и произошел отвал GPU-чипа. Заменили видеокарту - ситуация повторилась. Так сделали 10 раз - игра показала КРАЙНЕ стабильное поведение. Выбросив 11 видеокарт, РАЗРАБОТЧИКИ ЧТО-ТО ЗАПОДОЗРИЛИ, сказали 3D-моделлерам, что современные технологии не могут отрисовать мир из более чем тысячи треугольников. 3D-моделлеры пригорюнились: «Но так мы ничего красивого не создадим... Это будет посредственная игра!»

И шли споры... шли долго... до 2021 года... Как вдруг в переговорку вошел он, Brian Karis, и приободрил он моделлеров, и заговорщицки подмигнул разработчикам, и молвил: «Не дело это идти на компромиссы! Но и FPS хороший нужен! Вы мне высокополигональную геометрию, а я вам - высокий FPS! Мена? Мена!» И пошло, и поехало! И вынул он из-за пазухи конверт, на конверте было написано Unreal Engine 5, а внутри конверта был Nanite!

Обсудим как работает Nanite:

  • виртуальные текстуры
  • кластеризация графов
  • иерархичный Z buffer (Z test)
  • репроекция кадров в VR
  • deferred rendering
  • софтварный растеризатор для ускорения (т.к. реализация в видеодрайверах - СУБОПТИМАЛЬНА, можно лучше)
  • упрощение геометрии алгоритмом QSlim (схлопывание ребер)
  • и чем же Nanite принципиально отличается от упрощения геометрии и объектов разного LOD (level of details)

Пререквизиты (можно послушать в первых 15 минутах последней лекции ссылка):

  • что такое растеризация
  • что такое вершинные и фрагментные шейдеры

Лекторы

avatar
Полярный НиколайПреподаватель
avatar
Симиютин БорисПреподаватель

Партнеры