Руководство по программированию CUDA
Официальный, всесторонний ресурс для разработчиков, чтобы узнать модель программирования CUDA и как писать высокопроизводительный код, выполняющийся на графических процессорах NVIDIA. В этом руководстве рассматриваются архитектура платформы, интерфейс программирования, продвинутые функции аппаратного обеспечения и технические характеристики.
Уроки
Обзор курса
📚 Краткое содержание
Официальный, всесторонний ресурс для разработчиков, посвящённый изучению модели программирования CUDA и написанию высокопроизводительного кода, выполняющегося на графических процессорах NVIDIA. В этом руководстве рассматриваются архитектура платформы, интерфейс программирования, продвинутые аппаратные возможности и технические характеристики.
Освойте искусство параллельных вычислений с отраслевым стандартом — руководством по NVIDIA CUDA.
Автор: Корпорация NVIDIA
Благодарности: Авторские права © 2007–2024 Корпорация NVIDIA и её дочерние структуры. Все права защищены.
🎯 Цели обучения
- Определить роли хоста (ЦП) и устройства (ГПУ) в гетерогенной системе.
- Объяснить модель программирования SIMT и иерархическую организацию потоков, блоков и сеток.
- Различать код PTX (Parallel Thread Execution) и двоичный код (cubins), объяснить, как компиляция «по требованию» (JIT) обеспечивает совместимость.
- Создавать и компилировать ядра CUDA: писать функции global, настраивать выполнение с помощью тройного знака «>>>, и управлять рабочим процессом компиляции NVCC.
- Оптимизировать память и перемещение данных: различать модели унифицированной, явной и сопоставленной памяти, использовать фиксированную в памяти память хоста для эффективных передач.
- Управлять параллельным выполнением: использовать потоки CUDA, события и кооперативные группы для управления асинхронными задачами и синхронизации операций ЦП-ГПУ.
- Выполнять сложные арифметические действия с указателями и определять архитектурные узкие места (фон Неймана против Архимеда).
- Реализовывать продвинутые шаблоны выполнения CUDA, включая программно зависимые запуски ядер и гетерогенные пакетные передачи памяти.
- Использовать аппаратно-зависимые особенности, такие как области видимости потоков, асинхронные прокси и конвейеры, для максимизации конкуренции.
- Настроить и наладить производительность унифицированной памяти с использованием предварительной загрузки, подсказок использования и управления размером страницы.
🔹 Урок 1: Основы CUDA и обзор архитектуры
Обзор: В этом уроке представлено параллельное вычислительное платформа CUDA и её базовая аппаратная архитектура. Рассматривается, как гетерогенные системы используют как ЦП, так и ГПУ, модель программирования SIMT (Single Instruction, Multiple Threads), иерархия потоков, блоков и сеток. Также охватываются этапы компиляции CUDA, включая роли PTX, cubins и fatbins для обеспечения двоичной и обратной совместимости.
Результаты обучения:
- Определить роли хоста (ЦП) и устройства (ГПУ) в гетерогенной системе.
- Объяснить модель программирования SIMT и иерархическую организацию потоков, блоков и сеток.
- Различать код PTX (Parallel Thread Execution) и двоичный код (cubins), объяснить, как компиляция «по требованию» (JIT) обеспечивает совместимость.
🔹 Урок 2: Основы программирования на ГПУ и управление выполнением
Обзор: В этом уроке рассматриваются основные и продвинутые аспекты программирования на ГПУ с использованием CUDA C++. Происходит переход от простого определения ядер и рабочего процесса компиляции NVCC к сложным темам управления выполнением, включая проектирование ядер по модели SIMT, конфликты банков общей памяти, асинхронное выполнение с использованием потоков и событий. Студенты научатся балансировать модели памяти (унифицированная против явной) и оптимизировать занятость оборудования для высокопроизводительных вычислений.
Результаты обучения:
- Создавать и компилировать ядра CUDA: писать функции global, настраивать выполнение с помощью тройного знака «>>>, и управлять рабочим процессом компиляции NVCC.
- Оптимизировать память и перемещение данных: различать модели унифицированной, явной и сопоставленной памяти, использовать фиксированную в памяти память хоста для эффективных передач.
- Управлять параллельным выполнением: использовать потоки CUDA, события и кооперативные группы для управления асинхронными задачами и синхронизации операций ЦП-ГПУ.
🔹 Урок 3: Продвинутая логика памяти и многопроцессорные системы
Обзор: В этом уроке рассматривается переход от фундаментальных архитектур памяти и логики указателей к продвинутым методам ускорения на ГПУ. Охватываются аппаратные модели выполнения на уровне (SIMT, независимое планирование потоков), сложные механизмы синхронизации (асинхронные барьеры, ограниченные атомарные операции) и организация работы многопроцессорных систем с использованием как API времени выполнения, так и драйверных интерфейсов.
Результаты обучения:
- Выполнять сложные арифметические действия с указателями и определять архитектурные узкие места (фон Неймана против Архимеда).
- Реализовывать продвинутые шаблоны выполнения CUDA, включая программно зависимые запуски ядер и гетерогенные пакетные передачи памяти.
- Использовать аппаратно-зависимые особенности, такие как области видимости потоков, асинхронные прокси и конвейеры, для максимизации конкуренции.
🔹 Урок 4: Оптимизация, графы и аппаратные ускорители
Обзор: В этом уроке рассматриваются техники высокопроизводительного программирования на CUDA, с акцентом на оптимизацию перемещения данных и потока выполнения. Изучается переход от выполнения на основе потоков к постоянным графам CUDA, детальное управление унифицированной памятью через предварительную загрузку и подсказки, а также использование аппаратно-зависимых ускорителей, таких как Тензорный ускоритель памяти (TMA) и сохранение кэша L2. Кроме того, подробно описываются продвинутые паттерны синхронизации, разделение ресурсов через зелёные контексты и взаимодействие между различными интерфейсами для современных гетерогенных вычислений.
Результаты обучения:
- Настроить и наладить производительность унифицированной памяти с использованием предварительной загрузки, подсказок использования и управления размером страницы.
- Создавать, обновлять и выполнять графы CUDA, включая использование узлов памяти и запусков на устройстве.
- Реализовывать продвинутую синхронизацию с помощью асинхронных барьеров и паттерна «Производитель-Потребитель».
🔹 Урок 5: Техническая справка и расширения языка
Обзор: В этом уроке представлен глубокий технический анализ спецификаций модели программирования CUDA и расширений языка C++. Рассматриваются интерфейсы между аппаратным обеспечением и программным обеспечением через вычислительные возможности, переменные среды для контроля времени выполнения, а также конкретные требования синтаксиса при написании высокопроизводительного кода для устройств с применением современных стандартов C++, кооперативных групп и специализированных аппаратных инструкций.
Результаты обучения:
- Определять аппаратные ограничения и наборы функций в зависимости от версий вычислительных возможностей ГПУ.
- Настраивать среду выполнения CUDA и компиляцию JIT с использованием системных переменных среды.
- Применять расширения языка C++ (аннотации, лямбды и шаблоны) с соблюдением ограничений для сторонних устройств.