17. CUDA Stream and Asynchrony | CUDA Stream and Asynchrony
难度: Medium | 标签: CUDA, Stream, Asynchrony | 目标人群: 准备进入 Chapter 3 的学习者
这一页把 Chapter 1 的 GPU 执行直觉,接到 Chapter 3 的异步调度上。重点是 stream 如何帮助任务重叠。
前置关系
- Chapter 3 会直接遇到多 kernel 调度、通信重叠和流水化
- 先记住很多优化靠的是重叠和调度
你应该先建立的直觉
1. stream 是任务队列,不是魔法加速器
你可以把 stream 先理解成“GPU 上的任务队列”:
- 不同 stream 里的任务可以更灵活地安排
- 是否真的并行,还要看资源冲突和依赖关系
- stream 的价值在于调度,不是自动变快
2. 异步执行的价值在于重叠
常见的优化目标包括:
- 计算和数据搬运重叠
- 前后 kernel 的等待时间减少
- 通信和计算尽量并行
这也是为什么在大模型系统里,异步执行常常比“单个算子提速”更重要。
3. 流水化的目标是提高整体吞吐
流水化不是让某个步骤变成瞬间完成,而是让不同阶段尽量同时推进。
你只需要先记住:
- 单次延迟很重要
- 但整体吞吐更重要
- stream 的意义就是帮助系统更好地组织吞吐
一个最常见的理解路径
text
同步执行 -> 一个任务做完再做下一个 -> 可能浪费等待时间
异步执行 -> 让计算、搬运和通信尽量重叠 -> 提高整体吞吐这条线比记住 API 细节更重要。
后面 Chapter 3 的调度、通信和优化,都会建立在这个思路上。
常见误区
- 把 stream 当成“自动并行”
- 以为异步执行一定更快
- 只看单个 kernel 的时间,不看整体流水
- 忽略依赖关系和资源冲突
这一页学完后,你应该能回答
- stream 到底在解决什么问题
- 为什么异步执行不等于无条件并行
- 为什么计算和通信重叠很重要
- 为什么 Chapter 3 里很多优化都要考虑流水化
和后续章节的联系
Chapter 3: CUDA Kernel 调度
你会看到任务如何在多个 stream 中组织Chapter 3: 通信优化
你会看到通信和计算如何重叠Chapter 3: 算子融合
你会看到更好的调度如何减少等待和同步
小结
这一页的作用很简单:
- 先让你知道 stream 是什么
- 再让你知道异步执行为什么有价值
- 最后让你知道为什么 Chapter 3 要把调度和流水化放在前面
如果你能把“任务组织”和“重叠执行”联系起来,这一页的目标基本达成。
