GPU:创造 AI 的设备与它的并行之美
这是一份关于 GPU(图形处理单元) 架构、它与 CPU(中央处理单元) 的区别,以及它为何成为 AI 和加密货币 计算核心的文档,内容来源于 https://www.youtube.com/watch?v=58jtf24uijw。
💻 GPU:创造 AI 的设备与它的并行之美
简介:GPU 的核心作用
GPU(Graphical Processing Units,图形处理单元)与 CPU(Central Processing Units,中央处理单元)是现代计算机的核心。
您可能已经知道 GPU 的用途,但为什么它如此强大?
- 共同点: 比特币挖矿和训练像 ChatGPT 这样的 AI 模型,都依赖于 GPU。
- 核心差异: CPU 旨在最小化执行延迟,擅长通用计算;而 GPU 旨在最大化执行吞吐量,擅长重复的数学计算。
🧠 CPU 的工作方式:顺序执行
CPU 被称为计算机的通用“大脑”。它执行算术、控制和逻辑程序,这些程序由程序员编写的代码编译而来。
- 工作流程: 一个单核 CPU 顺序地执行指令:
- 获取(Fetches)指令。
- 解码(Decodes)指令。
- 执行(Executes)指令。
- 将结果存储(Stores)在寄存器中。
- 重复循环。
- 特性: CPU 采用顺序执行(sequentially),对于单个核心处理器而言,没有并行计算的概念,旨在尽快完成单个任务。
⚡ GPU 的强大:数据级并行
与 CPU 不同,GPU 的设计目标是让尽可能多的数据快速通过执行阶段,即最大化吞吐量(maximising throughput)。
数据级并行 (Data-Level Parallelism)
GPU 的核心优势在于数据级并行:
- 同时执行: 在 GPU 核心的任何时间点,多个执行单元都在对多个输入执行相同的指令。
- Warp(线程束): 一组执行相同指令的线程被称为一个 Warp(线程束)。为了效率,GPU 核心会预先准备多个 Warp 并按批次执行。
示例:向量操作(DAXPY 循环)
对于 \(Z[i] = A \cdot X[i] + Y[i]\) 这样的向量加权相加循环(称为 DAXPY 循环),GPU 的优势非常明显:
特性 | CPU (单核) | GPU (4 线程/Warp) |
---|---|---|
执行方式 | 必须顺序执行 1024 次,逐一处理每个索引。 | 4 个线程并行执行指令,同时访问 4 个索引。 |
效率 | 低 | 高,只需重复 256 次即可处理全部 1024 个索引。 |
适用场景
GPU 擅长对大量数据执行相同指令的重复性工作负载:
- 比特币挖矿: 涉及哈希值的暴力计算,需要一遍又一遍地重复调用相同的数学运算。
- AI 模型训练: 涉及对大量训练数据重复进行矩阵运算。
🔄 处理分支与延迟
条件分支 (If/Else)
GPU 即使在处理条件分支(如 if/else
语句)时也保持并行性:
- 谓词寄存器 (Predicate Registers): 每个线程都使用一个谓词寄存器(本质上是一个布尔标志
True
或False
)来保存条件。 - 执行与空闲:
- 如果线程的谓词为 True,则执行指令。
- 如果为 False,则该线程对该指令保持空闲(idle)。
- 局限性: 这种方法最适合简单的单级
if-then-else
语句。更复杂的嵌套分支需要使用特殊的硬件和指令。
避免停滞 (Stalling)
由于所有线程在一个 Warp 中是同步执行(lockstep)的,如果其中一个线程因等待慢速操作(如内存读取)而停滞(stalling),整个 GPU 核心都会停滞,导致计算资源闲置。
- Warp 切换 (Warp Switching): 为解决停滞问题,GPU 采用 Warp 切换技术。
- 当一个 Warp 停滞时,Warp 调度器(warp scheduler)会切换去执行另一个已准备好执行的 Warp。
- 通过这种方式,GPU 在 Warp 之间利用并行性,保持忙碌状态,从而提高整体效率。
📊 Flynn 分类法
CPU 和 GPU 等计算机架构可以通过 Flynn 分类法进行分类,该方法基于两个轴:指令(Instruction)和数据(Data),两者都可以是单(Single)或多(Multiple)的。
分类 | 简称 | 描述 | 示例 |
---|---|---|---|
单指令单数据 | SISD | 处理器处理单指令流和单数据流。 | 单核 CPU |
单指令多数据 | SIMD | 处理器处理单指令流,但操作多数据流。 | GPU(视频中示例) |
多指令多数据 | MIMD | 处理器可以同时处理多指令流和多数据流。 | 大多数现代多核 CPU |
多指令单数据 | MISD | (非常罕见) | - |
结论:各有所长
GPU 和 CPU 携手合作,使计算更高效:
- CPU: 针对最小化执行延迟设计,适用于通用计算和需要快速响应单个任务的场景。
- GPU: 针对最大化执行吞吐量设计,适用于需要对大量数据进行重复操作(如向量和矩阵计算)的数学密集型场景。