Технология CUDA и параллельные алгоритмы

Практический курс по CUDA для разработчиков, которые уже уверенно пишут на системном языке и хотят перенести вычисления на GPU. Восемнадцать глав ведут от модели исполнения и иерархии памяти до профилирования, многокарточных конфигураций и проектирования параллельных алгоритмов. Через весь курс проходит один проект —…
Продвинутый уровень
6–8 часов в неделю
Сертификат Stepik

Чему вы научитесь

  • Читать и писать ядра, понимая их поведение на уровне warp и SM
  • Проектировать раскладку данных под коалесированный доступ и shared memory без банковых конфликтов
  • Применять warp-примитивы, кооперативные группы и атомарные операции осознанно
  • Реализовывать редукцию, скан, гистограмму, компактификацию, сортировку, отбор top-k и тайлинг
  • Строить асинхронные конвейеры на потоках, событиях и CUDA Graphs
  • Использовать CUB, Thrust, libcu++ и математические библиотеки NVIDIA там, где это оправдано
  • Профилировать через Nsight Systems и Nsight Compute и принимать решения по метрикам
  • Работать с пулами памяти, асинхронным копированием, unified memory, VMM и IPC
  • Масштабировать вычисления на несколько GPU и собирать результат
  • Проверять корректность через compute-sanitizer, юнит-тесты ядер и golden-модели
  • Оценивать, какие алгоритмы стоит переносить на GPU, и перепроектировать те, что переносятся плохо

О курсе

Перенести вычислительное ядро на GPU обычно мешает не синтаксис. Ядро пишется за вечер, запускается — и работает вдвое медленнее однопоточной версии на CPU. Дальше начинается настоящая работа: понять, во что упирается код, почему warp вместо одной транзакции памяти выпускает тридцать две, зачем __syncthreads() стоит там, где стоит, и почему занятость в сто процентов не сделала ядро быстрее.

Курс устроен вокруг этой работы. Он не пересказывает Programming Guide и не учит программировать: указатели, кэш, выравнивание и CMake считаются известными. Он вводит в CUDA как в технологию и, главное, ставит способ думать о задаче в терминах пропускной способности, дивергенции, занятости и стоимости коммуникации.

Что внутри

Модель исполнения и иерархия памяти. Коалесинг, раскладка данных, shared memory и банковые конфликты. Warp-примитивы, кооперативные группы, атомарные операции и модель памяти libcu++. Базовые параллельные паттерны: редукция, скан, гистограмма, компактификация, сортировка, отбор top-k, тайлинг. Потоки, события и CUDA Graphs. Разреженные структуры и нерегулярный параллелизм. Библиотеки NVIDIA — cuBLAS, cuRAND, cuFFT, cuSPARSE и CCCL. Профилирование в Nsight Systems и Nsight Compute, чтение SASS, сокрытие латентности. Продвинутая работа с памятью: пулы, асинхронные копирования, unified memory, VMM, IPC. Несколько GPU, шардирование и NCCL. Корректность: compute-sanitizer, юнит-тесты ядер, детерминизм, контейнеризация и мониторинг. Отдельная глава — проектирование параллельных алгоритмов: модель стоимости, выбор гранулярности, анти-паттерны.

Сквозной проект

VecLens — движок приближённого поиска ближайших соседей по эмбеддингам, то, что стоит под retrieval в RAG-системах, рекомендациях и дедупликации. Задача выбрана потому, что она одновременно упирается в память, в арифметику и в нерегулярный доступ, а ещё требует конвейера — на ней естественно ложится почти весь материал курса.

Проект растёт вместе с главами: от каркаса CMake и первого ядра расстояния к layout базы векторов, инвертированным спискам, обучению центроидов на cuBLAS, конвейеру на CUDA Graphs, шардированию по картам, тестовому контуру и JIT-специализации ядер. К концу собирается библиотека и CLI с командами генерации данных, обучения, построения индекса, поиска, измерения recall и бенчмарка.

Как читать код курса

Приоритет отдан исходникам и разбору чисел, а не описательному тексту. Каждый приём сопровождается ответом на вопрос, сколько он стоит и как измерить выигрыш. Показатели профилировщика подаются как порядок величины для названного класса карты, а не как универсальная константа, — на своей машине студент получает свои числа и учится их читать.

Чего в курсе нет

Обучения программированию с нуля. OpenCL, SYCL, HIP и OpenACC. Обучения нейросетей и теории машинного обучения. Программирования графики, кроме короткого обзора интеропа. Готовых ответов вида «ставьте блок 256» без объяснения, откуда это число.

Для кого этот курс

Разработчики уровня middle и выше, которые уверенно пишут на C++, C, Rust, Go, Java или C# и хотят перейти к программированию GPU: C++-разработчики, переносящие вычислительное ядро продукта на карту; backend- и data-инженеры, которым нужно ускорить обработку эмбеддингов, матриц или графов; инженеры ML-инфраструктуры, желающие понимать, что происходит под фреймворками, и писать собственные ядра; разработчики HPC-приложений, переходящие с OpenMP и MPI на гетерогенные вычисления. Курс не подойдёт тем, кто только начинает программировать, а также тем, кому нужен обзор машинного обучения или готовые рецепты без разбора причин. Если задача решается вызовом готовой библиотеки и этого достаточно — курс будет избыточен.

Начальные требования

Уверенное владение хотя бы одним системным языком, понимание указателей, выравнивания, кэша и стоимости обращения к памяти. Опыт сборки проектов через CMake. Знание CUDA, PTX, Nsight, cuBLAS, Thrust и CUB не предполагается.

Для практики нужна видеокарта NVIDIA архитектуры Turing или новее (sm_75: GTX 1650, RTX 20-й серии и выше) и CUDA Toolkit 13.x. Код проекта собирается и для Pascal, но только на CUDA Toolkit 12.x — CUDA 13.0 убрала поддержку этих карт. Теоретическую часть можно проходить без карты; практическую — нет.

Программа курса

В курс входят

  • 156 уроков
  • 78 тестов
загружаем...

Наши преподаватели

Certificate

Сертификат

Сертификат Stepik

Что вы получаете

  • Восемнадцать глав с разбором кода, вывода профилировщиков и конкретных чисел
  • Исходники сквозного проекта: библиотека, CLI, микробенчмарки, юнит-тесты, скрипты профилирования и санитайзинга
  • Практическое задание в конце каждого урока с явным критерием выполнения
  • Вопросы для самопроверки на причинно-следственные связи и компромиссы, а не на определения
  • Тестовые задачи в конце глав с третьей по пятнадцатую, с объяснением после неверного ответа
  • Каркас для замеров и тестов, который переносится в собственные проекты

Сколько стоит обучение

999 ₽
Вы попробовали и поняли, что вам сейчас не подходит этот курс? Ничего страшного, мы вернём вам деньги в течение 30-ти дней после покупки.

Часто задаваемые вопросы

Расскажите о курсе друзьям