Skip to content

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 要把调度和流水化放在前面

如果你能把“任务组织”和“重叠执行”联系起来,这一页的目标基本达成。

Released under the MIT License.