К курсам
AI021 Профессиональное

Руководство по программированию CUDA

Официальный, всесторонний ресурс для разработчиков, чтобы узнать модель программирования CUDA и как писать высокопроизводительный код, выполняющийся на графических процессорах NVIDIA. В этом руководстве рассматриваются архитектура платформы, интерфейс программирования, продвинутые функции аппаратного обеспечения и технические характеристики.

5.0
30.0h
1762 учеников
5 lessons
1 лайки
Искусственный интеллект
Начать обучение

Обзор курса

📚 Краткое содержание

Официальный, всесторонний ресурс для разработчиков, посвящённый изучению модели программирования CUDA и написанию высокопроизводительного кода, выполняющегося на графических процессорах NVIDIA. В этом руководстве рассматриваются архитектура платформы, интерфейс программирования, продвинутые аппаратные возможности и технические характеристики.

Освойте искусство параллельных вычислений с отраслевым стандартом — руководством по NVIDIA CUDA.

Автор: Корпорация NVIDIA

Благодарности: Авторские права © 2007–2024 Корпорация NVIDIA и её дочерние структуры. Все права защищены.

🎯 Цели обучения

  1. Определить роли хоста (ЦП) и устройства (ГПУ) в гетерогенной системе.
  2. Объяснить модель программирования SIMT и иерархическую организацию потоков, блоков и сеток.
  3. Различать код PTX (Parallel Thread Execution) и двоичный код (cubins), объяснить, как компиляция «по требованию» (JIT) обеспечивает совместимость.
  4. Создавать и компилировать ядра CUDA: писать функции global, настраивать выполнение с помощью тройного знака «>>>, и управлять рабочим процессом компиляции NVCC.
  5. Оптимизировать память и перемещение данных: различать модели унифицированной, явной и сопоставленной памяти, использовать фиксированную в памяти память хоста для эффективных передач.
  6. Управлять параллельным выполнением: использовать потоки CUDA, события и кооперативные группы для управления асинхронными задачами и синхронизации операций ЦП-ГПУ.
  7. Выполнять сложные арифметические действия с указателями и определять архитектурные узкие места (фон Неймана против Архимеда).
  8. Реализовывать продвинутые шаблоны выполнения CUDA, включая программно зависимые запуски ядер и гетерогенные пакетные передачи памяти.
  9. Использовать аппаратно-зависимые особенности, такие как области видимости потоков, асинхронные прокси и конвейеры, для максимизации конкуренции.
  10. Настроить и наладить производительность унифицированной памяти с использованием предварительной загрузки, подсказок использования и управления размером страницы.

Уроки

Lesson

This lesson introduces the fundamental shift from latency-optimized CPU architectures to throughput-oriented GPU computing. Students will learn to distinguish between these processing models and understand how the CUDA programming platform enables massive parallel execution for data-intensive tasks.

This lesson introduces the fundamentals of CUDA kernel development, focusing on the SIMT execution model and the use of the __global__ specifier to launch parallel functions on GPU Streaming Multiprocessors. Students will learn how to manage asynchronous kernel execution, handle device memory, and structure code to ensure effective hardware utilization.

This lesson explores the fundamental differences between von Neumann and Harvard architectures, focusing on how memory access pathways impact computational performance. Students will learn to identify the von Neumann bottleneck, understand the benefits of split-cache Harvard designs, and analyze how modern systems utilize a Modified Harvard Architecture to balance throughput with programming flexibility.

AI021: Optimization, Graphs, and Hardware Accelerators (Lesson 4) explores the shift from CPU-bottlenecked stream execution to GPU-autonomous workflows. Students will learn to utilize modern primitives like CUDA Graphs, lazy loading, and asynchronous memory prefetching to minimize host-side overhead and maximize hardware efficiency.

This lesson explores the technical reference and language extensions in CUDA, focusing on the relationship between virtual architectures (PTX) and real hardware (SASS). Students will learn to manage compute capabilities, utilize architecture-specific macros, and navigate language constraints to ensure code portability and performance.