返回课程
AI021 Professional

CUDA 编程指南

开发者学习CUDA编程模型以及如何编写在NVIDIA GPU上高效执行的代码的官方全面资源。本指南涵盖平台架构、编程接口、高级硬件功能和技术规格。

5.0
30.0h
1762 名学生
1 点赞
人工智能
开始学习

课程概述

📚 内容概要

官方、全面的开发者资源,用于学习 CUDA 编程模型以及如何编写在 NVIDIA GPU 上高效运行的代码。本指南涵盖平台架构、编程接口、高级硬件特性及技术规格。

掌握并行计算的艺术,使用行业标准的 NVIDIA CUDA 指南。

作者: NVIDIA 公司

致谢: 版权所有 © 2007–2024 NVIDIA 公司及其关联方。保留所有权利。

🎯 学习目标

  1. 定义异构系统中主机(CPU)和设备(GPU)的角色。
  2. 解释 SIMT 编程模型以及线程、块和网格的分层组织结构。
  3. 区分 PTX(并行线程执行)与二进制代码(cubins),并解释即时(JIT)编译如何实现兼容性。
  4. 开发与编译 CUDA 内核:编写 __global__ 函数,使用三重尖括号语法配置执行,并管理 NVCC 编译流程。
  5. 优化内存与数据传输:区分统一内存、显式内存和映射内存模型,并实现页面锁定的主机内存以实现高效传输。
  6. 管理并行执行:使用 CUDA 流、事件和协作组来管理异步任务,并同步 CPU-GPU 操作。
  7. 执行复杂的指针运算,并识别体系结构瓶颈(冯·诺依曼与哈佛架构对比)。
  8. 实现高级 CUDA 执行模式,包括程序化依赖内核启动和异构批处理内存传输。
  9. 利用硬件特定功能,如线程作用域、异步代理和流水线,以最大化并发性。
  10. 使用预取、使用提示和页大小管理等方法配置并调优统一内存性能。

🔹 第 1 课:CUDA 基础与架构概述

概述: 本课程介绍 CUDA 并行计算平台及其底层硬件架构。探讨异构系统如何利用 CPU 与 GPU,SIMT(单指令多线程)编程模型,以及线程、块和网格的层级结构。此外,还涵盖 CUDA 编译工作流程,包括 PTX、cubins 和 fatbins 在确保二进制兼容性和向前兼容性中的作用。

学习成果:

  • 定义异构系统中主机(CPU)和设备(GPU)的角色。
  • 解释 SIMT 编程模型以及线程、块和网格的分层组织结构。
  • 区分 PTX(并行线程执行)与二进制代码(cubins),并解释即时(JIT)编译如何实现兼容性。

🔹 第 2 课:核心 GPU 编程与执行管理

概述: 本课程涵盖使用 CUDA C++ 进行 GPU 编程的基础与高级内容。从基本内核定义和 NVCC 编译流程,过渡到复杂执行管理主题,包括 SIMT 内核设计、共享内存银行冲突,以及使用流和事件实现的异步执行。学生将学习平衡内存模型(统一内存与显式内存),并优化硬件占用率以实现高性能计算。

学习成果:

  • 开发与编译 CUDA 内核:编写 __global__ 函数,使用三重尖括号语法配置执行,并管理 NVCC 编译流程。
  • 优化内存与数据移动:区分统一内存、显式内存和映射内存模型,并实现页面锁定的主机内存以实现高效传输。
  • 管理并行执行:使用 CUDA 流、事件和协作组来管理异步任务,并同步 CPU-GPU 操作。

🔹 第 3 课:高级内存逻辑与多 GPU 系统

概述: 本课程探索从基础内存架构和指针逻辑向高级 GPU 加速技术的演进。涵盖硬件级执行模型(SIMT、独立线程调度)、复杂的同步机制(异步屏障、作用域原子操作),以及通过运行时和驱动 API 协调多 GPU 系统。

学习成果:

  • 执行复杂的指针运算,并识别体系结构瓶颈(冯·诺依曼与哈佛架构对比)。
  • 实现高级 CUDA 执行模式,包括程序化依赖内核启动和异构批处理内存传输。
  • 利用硬件特定功能,如线程作用域、异步代理和流水线,以最大化并发性。

🔹 第 4 课:优化、图结构与硬件加速器

概述: 本课程涵盖高性能 CUDA 编程技术,重点在于优化数据移动与执行流程。探讨从基于流的执行转向持久化的 CUDA 图结构,通过预取和提示对统一内存进行细粒度控制,以及利用硬件特定加速器(如张量内存加速器 TMA 和 L2 缓存持久化)。此外,详细说明高级同步模式、通过绿色上下文进行资源分区,以及跨 API 互操作性,以支持现代异构计算。

学习成果:

  • 使用预取、使用提示和页大小管理配置并调优统一内存性能。
  • 构建、更新和执行 CUDA 图,包括内存节点和设备端启动的使用。
  • 使用异步屏障和生产者-消费者模式实现高级同步。

🔹 第 5 课:技术参考与语言扩展

概述: 本课程深入探讨 CUDA 编程模型的参考规范和 C++ 语言扩展。涵盖通过计算能力实现的软硬件接口、用于运行时控制的环境变量,以及使用现代 C++ 标准、协作组和专用硬件内联函数编写高性能设备代码的具体语法要求。

学习成果:

  • 根据 GPU 计算能力版本识别硬件限制和功能集。
  • 使用系统级环境变量配置 CUDA 执行环境和 JIT 编译。
  • 应用 C++ 语言扩展(注解、lambda 表达式和模板),同时遵守设备端限制。