Содержание курса
Модель GPU-вычислений и место CUDA
8 уроков
1.
Что мы будем строить — VecLens
↗
2.
Латентность против пропускной способности
↗
3.
Архитектура GPU — SM, warp, планировщики
↗
4.
Модель исполнения — grid, block, warp, thread
↗
5.
Иерархия памяти и её реальная стоимость
↗
6.
Toolchain — nvcc, PTX, SASS, fatbin
↗
7.
Каркас проекта на CMake
↗
8.
Измерения с первого дня — события и roofline
↗
Первые ядра и Runtime API
9 уроков
1.
Ядро, конфигурация запуска, индексация
↗
2.
Grid-stride loop как базовая идиома
↗
3.
Ошибки CUDA — асинхронность и sticky-состояние
↗
4.
Память устройства и RAII
↗
5.
Managed memory и асинхронные аллокаторы
↗
6.
Векторные типы, выравнивание, __restrict__
↗
7.
C++20 в device-коде
↗
8.
compute-sanitizer с первого коммита
↗
9.
Практика — каркас VecLens и ядро L2-расстояния
↗
Память, коалесинг и layout данных
9 уроков
1.
Транзакции памяти и коалесинг
↗
2.
AoS против SoA на реальных данных
↗
3.
Выравнивание и векторизованные загрузки
↗
4.
Shared memory — банки и конфликты
↗
5.
Константная память и параметры ядра
↗
6.
L2, persistence и управление кэшем
↗
7.
Регистры, occupancy и spilling
↗
8.
Анализ памяти в Nsight Compute
↗
9.
Практика — layout базы векторов VecLens
↗
Warp-примитивы и кооперативные группы
9 уроков
1.
Warp, дивергенция и стоимость ветвлений
↗
2.
__shfl_sync и обмен между потоками warp
↗
3.
Голосование и матчинг внутри warp
↗
4.
Warp-редукция и warp-скан
↗
5.
Cooperative Groups
↗
6.
Independent thread scheduling
↗
7.
Атомарные операции
↗
8.
libcu++ — атомики, барьеры, модель памяти
↗
9.
Практика — warp-based top-k
↗
Редукции, сканы и гистограммы
9 уроков
1.
Редукция — путь от наивной версии к оптимальной
↗
2.
Блочная редукция как переиспользуемый компонент
↗
3.
Многоблочная редукция и глобальная синхронизация
↗
4.
Prefix sum — Hillis-Steele и Blelloch
↗
5.
Single-pass scan и decoupled look-back
↗
6.
Гистограммы и приватизация
↗
7.
CUB — device-, block- и warp-уровни
↗
8.
Сегментированные операции
↗
9.
Практика — построение инвертированных списков
↗
Тайлинг и вычислительно-плотные ядра
9 уроков
1.
Арифметическая интенсивность и roofline
↗
2.
Наивный GEMM и его пределы
↗
3.
Тайлинг через shared memory
↗
4.
Регистровый тайлинг и thread coarsening
↗
5.
Двойная буферизация и prefetch
↗
6.
cuBLAS — когда не писать своё
↗
7.
Смешанная точность
↗
8.
Tensor Cores — WMMA, mma и CUTLASS
↗
9.
Практика — батчевое умножение запросов на центроиды
↗
Потоки, события и асинхронность
9 уроков
1.
Асинхронная модель исполнения
↗
2.
Перекрытие копирований и вычислений
↗
3.
События и зависимости между потоками
↗
4.
Конвейер с двойной буферизацией на хосте
↗
5.
Приоритеты потоков и host callbacks
↗
6.
CUDA Graphs — захват и запуск
↗
7.
Обновление графов и явное построение
↗
8.
Многопоточность хоста и CUDA
↗
9.
Практика — конвейер запросов на потоках и графах
↗
Сортировка, отбор и top-k
9 уроков
1.
Bitonic sort
↗
2.
Radix sort на GPU
↗
3.
CUB DeviceRadixSort и сортировка пар
↗
4.
Selection — k-й элемент без полной сортировки
↗
5.
Top-k — очереди и битонические сети
↗
6.
Слияние отсортированных списков
↗
7.
Thrust — векторы, алгоритмы, политики
↗
8.
Fancy-итераторы и кастомные компараторы
↗
9.
Практика — финальный отбор top-k
↗
Разреженные данные и нерегулярный параллелизм
9 уроков
1.
Форматы разреженных данных
↗
2.
SpMV — три стратегии распараллеливания
↗
3.
Балансировка нагрузки
↗
4.
Динамическое распределение работы
↗
5.
BFS и обход графов
↗
6.
cuSPARSE и разреженная линейная алгебра
↗
7.
Stream compaction
↗
8.
Хэш-таблицы на GPU
↗
9.
Практика — обход инвертированных списков
↗
Математические библиотеки NVIDIA
8 уроков
1.
Экосистема библиотек CUDA
↗
2.
cuBLAS на практике
↗
3.
cuRAND и воспроизводимость
↗
4.
cuFFT и свёртки
↗
5.
Точность вычислений с плавающей точкой
↗
6.
CCCL как единый стек
↗
7.
Интероп с CPU-кодом и другими рантаймами
↗
8.
Практика — обучение центроидов k-means
↗
Профилирование и оптимизация
9 уроков
1.
Методология оптимизации GPU-кода
↗
2.
Nsight Systems — системный таймлайн
↗
3.
Nsight Compute — анализ ядра
↗
4.
Occupancy — теория и практика
↗
5.
SASS — чтение и анализ
↗
6.
Сокрытие латентности
↗
7.
NVTX и профилирование прикладного кода
↗
8.
Бенчмарки и регрессии в CI
↗
9.
Практика — оптимизация поискового ядра
↗
Продвинутая работа с памятью
9 уроков
1.
Асинхронное копирование и cuda-pipeline
↗
2.
cuda-barrier и warp-специализация
↗
3.
Пулы памяти и аллокаторы
↗
4.
Virtual Memory Management API
↗
5.
Unified Memory на практике
↗
6.
Zero-copy и mapped memory
↗
7.
IPC и разделение памяти между процессами
↗
8.
Hopper и Blackwell — TMA и кластеры
↗
9.
Практика — база, не помещающаяся в VRAM
↗
Несколько GPU и масштабирование
8 уроков
1.
Топология системы
↗
2.
Peer-to-peer доступ и копирование
↗
3.
Разбиение данных — шардирование и репликация
↗
4.
NCCL — коллективные операции
↗
5.
Агрегация результатов и балансировка
↗
6.
MPS, MIG и разделение карты
↗
7.
Отказоустойчивость и деградация
↗
8.
Практика — шардированный индекс
↗
Корректность, тестирование, эксплуатация
9 уроков
1.
Классификация ошибок CUDA
↗
2.
compute-sanitizer в рабочем цикле
↗
3.
Юнит-тесты GPU-ядер
↗
4.
Детерминизм и воспроизводимость
↗
5.
Отладка — assert, printf, cuda-gdb
↗
6.
RAII, исключения и время жизни
↗
7.
Контейнеризация и деплой
↗
8.
Мониторинг GPU в продакшене
↗
9.
Практика — тестовый контур VecLens
↗
Проектирование параллельных алгоритмов
9 уроков
1.
От последовательного алгоритма к параллельному
↗
2.
Каталог параллельных паттернов
↗
3.
Work efficiency и стоимость коммуникации
↗
4.
Амдал, Густафсон и реальные пределы
↗
5.
Выбор гранулярности
↗
6.
Персистентные ядра и мегаядра
↗
7.
Динамический параллелизм
↗
8.
Анти-паттерны GPU-алгоритмов
↗
9.
Практика — перепроектирование фильтрации по метаданным
↗
Компиляция, PTX и интеграция
8 уроков
1.
PTX — чтение и написание
↗
2.
Интринсики CUDA
↗
3.
NVRTC — компиляция во время выполнения
↗
4.
Раздельная компиляция и device LTO
↗
5.
Driver API против Runtime API
↗
6.
Диспетчеризация по архитектуре
↗
7.
Встраивание CUDA-кода в сервисы
↗
8.
Практика — JIT-специализация ядра расстояния
↗
Тонкая настройка VecLens
8 уроков
1.
Профиль полного пайплайна
↗
2.
Автотюнинг параметров запуска
↗
3.
Сжатие векторов — скалярное квантование
↗
4.
Product Quantization на GPU
↗
5.
Батчинг запросов и кэширование
↗
6.
Хвостовые задержки
↗
7.
Сравнение с CPU-реализацией
↗
8.
Итоговый бенчмарк
↗
Сборка проекта и перенос на свои задачи
8 уроков
1.
Архитектура готового VecLens
↗
2.
Публичный API и жизненный цикл индекса
↗
3.
Сборка и конфигурация
↗
4.
Полный прогон — генерация, обучение, поиск
↗
5.
Расширение — новые метрики и типы данных
↗
6.
Перенос подходов на свои задачи
↗
7.
Куда движется CUDA
↗
8.
Разбор проблем при переносе на своё железо
↗