技术指南

CUDA 和 GPU 编程

CUDA 是 NVIDIA 的平台,用于编写在 GPU 上运行的程序,解锁数千个内核以进行并行计算。

阅读时间:2分钟最后更新

概述

It is the software foundation that turned GPUs into the engine of modern AI.

深入探讨

CUDA(统一计算设备架构)让开发人员可以编写直接在 NVIDIA GPU 上运行的代码,而不仅仅是在 CPU 上运行。编程模型以“内核”为中心——由数千个轻量级线程同时执行的功能,这些线程被组织成块和网格。由于 GPU 是 SIMT(单指令、多线程),因此组中的所有线程对不同数据运行相同的指令,这对于矩阵和向量数学来说是理想的选择。大多数 AI 从业者从不编写原始 CUDA;相反,PyTorch 和 TensorFlow 等框架在底层调用优化的 CUDA 库——用于神经网络操作的 cuDNN 和用于线性代数的 cuBLAS。这种丰富、成熟的软件堆栈是 NVIDIA 最大的竞争护城河:即使竞争对手的芯片速度很快,匹配 CUDA 生态系统也极其困难。

技术洞察

在 CUDA 中,您可以跨线程块网格启动内核;每个线程计算一份输出,由其块和线程索引标识。性能取决于内存层次结构:快速的片上“共享内存”与较慢的全局内存,以及相邻线程读取相邻地址的“合并”访问。避免扭曲发散(即 32 线程“扭曲”中的线程采用不同的分支并且必须串行化)也是保持 GPU 核心繁忙的关键。

战略影响

成本与预算

多年来,架构决策决定着性能和运营成本。

更清晰的判决

技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。

质量控制

更好的工程选择可以减少生产中的可靠性事故。

CUDA 和 GPU 编程的未来

由于其生态系统的锁定,CUDA 将在人工智能领域保持主导地位多年,但压力正在增加。 OpenAI 的 Triton 等开放替代方案让开发人员可以用 Python 编写 GPU 内核,而跨供应商的努力(OpenCL、AMD 的 ROCm、SYCL)旨在打破 NVIDIA 的控制。高级编译器越来越多地自动生成优化的 GPU 代码,因此手工编写内核的工程师越来越少。趋势是朝着更高层次的抽象发展,而 CUDA 保持了每个人比较的性能基准。

现实世界的实施

当您调用 .to('cuda') 时,PyTorch 通过 CUDA 自动在 GPU 上运行张量运算

cuDNN 提供手动调整的 CUDA 卷积实现,可加速训练图像模型

工程师编写自定义 CUDA 内核来加速专门的科学模拟

OpenAI 的 Triton 让研究人员可以用 Python 而不是低级 CUDA C 编写高效的 GPU 内核

风险与防护栏

优化一项基准测试可以隐藏更广泛的系统弱点。

基础设施和维护成本常常被低估。

随着系统变得更加复杂,安全性和可观察性差距可能会扩大。

实施路线图

1

在实施之前定义延迟、质量和成本目标。

2

在实际负载和数据条件下进行基准测试。

3

仪器监控错误、漂移和用户影响。

4

在扩展之前准备回滚和事件响应路径。

不断探索

Free newsletter

Get the daily AI briefing

Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.

One email each weekday. Unsubscribe in one click. We never sell or share your address.

Test yourself

Take the CUDA and GPU Programming quiz

Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.

开始测验

Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation

下一个指南

GPU 内存管理和碎片

常见问题

What is CUDA and GPU Programming?

CUDA 是 NVIDIA 的平台,用于编写在 GPU 上运行的程序,解锁数千个内核以进行并行计算。它是将 GPU 转变为现代人工智能引擎的软件基础。

在 CUDA 术语中,什么是“内核”?

在 CUDA 中,内核是一个在数千个 GPU 线程上同时执行的函数,每个线程处理不同的数据。

SIMT执行模型是什么意思?

SIMT(单指令、多线程)意味着多组线程对不同的数据执行相同的指令,非常适合矩阵数学。

为什么 PyTorch 和 TensorFlow 很少要求用户编写原始 CUDA?

这些框架封装了高度优化的 CUDA 库(cuDNN、cuBLAS),因此用户无需编写低级内核即可获得 GPU 加速。

什么是“扭曲发散”?为什么它会损害性能?

一个 warp 是一组(通常是 32 个)线程;如果它们采用不同的分支,硬件会将路径串行化,从而浪费并行吞吐量。

为什么“合并”内存访问在 CUDA 中很重要?

当相邻线程访问相邻内存地址时,硬件可以组合这些读取,从而显着提高内存吞吐量。