Бакалавриат
2025/2026




Программирование на CUDA
Статус:
Курс по выбору (Прикладная математика и информатика)
Где читается:
Факультет компьютерных наук
Когда читается:
3-й курс, 3, 4 модуль
Охват аудитории:
для своего кампуса
Язык:
русский
Кредиты:
6
Контактные часы:
80
Программа дисциплины
Аннотация
Наверняка каждый из вас сталкивался с обучением нейронных сетей, однако то, что происходит внутри них, остаётся для многих загадкой. На этом курсе мы изучим то, что лежит в сердце большинства ML-приложений, а именно программирование на CUDA.
В нашем курсе вы научитесь писать собственные CUDA-программы, профилировать и оптимизировать их, разберётесь в архитектуре GPU и в том, как строить вычислительные ядра под любые задачи. Вы увидите, как работают NVIDIA библиотеки для GEMM, а также CuFFT и CuDNN, освоите TensorRT и Triton, поймёте разницу между GPU и TPU/NPU.
И, конечно же, в курсе планируется большое количество домашних заданий на все это. Приходите, если не боитесь писать на C++ и знаете основы глубинного обучения.
Цель освоения дисциплины
- Цель курса состоит в том, чтобы научиться писать собственные CUDA-программы, профилировать и оптимизировать их, разбираться в архитектуре GPU и в том, как строить вычислительные ядра под любые задачи.
Планируемые результаты обучения
- Знать базовые принципы CUDA
- Уметь писать простые программы для GPU
- Описывать архитектуру и формулировать основные принципы работы GP GPU NVIDIA
Содержание учебной дисциплины
- Введение, Hello-World kernel на CUDA
- Работа с памятью, многомерные блоки
- Компиляция программ под разные архитектуры
- Архитектура GPU: Warps, shared memory, warp scheduling
- Roofline model, введение в GEMM
- Транзакции, профилирование памяти, Nsight Compute
- Reduce
- CUDA streams, CUDA graphs
- Продолжение GEMM — cuBLAS, CUTLASS
- cuFFT, cuDNN
- TensorRT, Triton
- NPU, TPU, История развития видеокарт
Элементы контроля
- Экзамен
- БДЗВ этих частях домашних работ планируется написать общие компоненты для работы с нейросетями - свертки, relu, линейные слои и проч. Постепенно код будет оптимизироваться/переписываться с учетом того, что прошли на лекциях, то есть будем добавлять знания о shared memory, reduce, cuda streams и проч. Планируется также написание питон обертки над библиотекой
- МДЗСюда войдет все то, что было покрыто в лекциях, но не пошло в БДЗ + дополнительные задачи для большего усвоения материала: Hello world Простые kernel-ы на работу с памятью Простые kernel-ы на shared memory Простые kernel-ы на reduce Простые kernel-ы c cuda graphs/streams Flash attention Задачи на работу с библиотеками cublass, cutlass, cufft, cudnn Задачи на TensorRT и triton
Список литературы
Рекомендуемая основная литература
- 16794 - Основы работы с технологией CUDA - А.Боресков; А.Харламов - ДМК Пресс - 2016 - https://hse.alpinadigital.ru/document/16794 - Alpina
- Тоуманнен, Б. Программирование GPU при помощи Python и CUDA : руководство / Б. Тоуманнен , перевод с английского А. В. Борескова. — Москва : ДМК Пресс, 2020. — 252 с. — ISBN 978-5-97060-821-0. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/179469 (дата обращения: 00.00.0000). — Режим доступа: для авториз. пользователей.
Рекомендуемая дополнительная литература
- Рутш, Г. CUDA Fortran для инженеров и научных работников. Рекомендации по эффективному программированию на языке CUDA Fortran / Г. Рутш, М. Фатика , перевод с английского А. А. Слинкин. — Москва : ДМК Пресс, 2014. — 364 с. — ISBN 978-5-97060-065-8. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/58702 (дата обращения: 00.00.0000). — Режим доступа: для авториз. пользователей.
- Сандерс, Д. Технология CUDA в примерах: введение в программирование графических процессоров / Д. Сандерс, Э. Кэндрот. — Москва : ДМК Пресс, 2011. — 232 с. — ISBN 978-5-94074-504-4. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/3029 (дата обращения: 00.00.0000). — Режим доступа: для авториз. пользователей.