读懂 Speed of Light 报告

Lesson 02 · CUDA 性能调优 · 把 roofline 落到真实数字

上一节你学会了用 roofline 判断瓶颈。 但真实工作里,你不会手算算术强度——你会让 Nsight Compute(ncu) 替你测, 然后读报告。调优 80% 的时间都花在读报告上。本节你将学会读懂最重要的那一段:Speed of Light(SOL)

本节目标(一个可带走的胜利): 看到一份 ncu 的 Speed of Light 段, 你能在 10 秒内说出这个 kernel 是访存瓶颈计算瓶颈还是延迟瓶颈, 并知道下一步该查什么。

1. Speed of Light 是什么

ncu 把 kernel 的性能压缩成两个最关键的百分比,这就是 Speed of Light 段—— "相对光速",即你跑到了硬件理论极限的百分之多少:[1]

指标含义
Compute (SM) Throughput计算单元用了峰值算力的百分之几
Memory Throughput访存子系统用了峰值带宽的百分之几

这两个数,就是上节 roofline 的两堵墙——只不过 ncu 已经替你算好、归一化成百分比了。 你要做的不是计算,而是比较谁高

2. 一份真实报告长什么样

在 A100 上对一个逐元素 kernel(如 y = a*x + y,即 SAXPY)跑 ncu --section SpeedOfLight ./saxpy,SOL 段大致是:

  Section: GPU Speed Of Light Throughput
  ------------------------------------------------------------
  Metric Name                    Metric Value
  ------------------------------------------------------------
  Memory Throughput        [%]      92.41   |=================  |
  Compute (SM) Throughput  [%]       8.13   |=                  |
  DRAM Throughput          [%]      91.20
  Duration                 [us]      142.5
  Achieved Occupancy       [%]      85.30
  ------------------------------------------------------------

读法:Memory 92%,Compute 8%。访存几乎贴墙,计算几乎空转。 结论一目了然——这是访存瓶颈(memory-bound)。跟上节预测的"逐元素算子总是访存瓶颈"完全吻合。

别去优化那 8% 的计算——它不是瓶颈。要让这个 kernel 变快,只能从访存下手: 减少读写字节、提高带宽利用(向量化、合并访问)。

3. 三种诊断:一张决策表

把 SOL 的两个数字一比,kernel 必然落入三种情况之一。这张表是本节的核心,请记住它。

Memory %Compute %诊断下一步
高(>60)访存瓶颈看 Memory Workload Analysis
高(>60)计算瓶颈看 Compute Workload Analysis
延迟瓶颈看 Occupancy / Scheduler

第三种——两个都低——是新手最容易看漏的。它不代表 kernel 很闲,而是说两种资源都没喂饱, 通常是并行度不够、延迟没藏住:活跃的 warp 太少,SM 在干等内存返回。 这时优化访存或计算都没用,要提高 occupancy 或指令级并行(ILP)。[1]

"两高"会出现吗? 几乎不会。一个 kernel 同一时刻通常只被一种资源卡住。 如果两个都接近 100%,恭喜——这个 kernel 已经接近最优,没多少优化空间了。

4. ncu 还会直接告诉你结论

你甚至不必自己查表。ncu 有内置的 规则引擎(guided analysis),会在报告里直接写一句诊断, 比如:[2]

[Warning] This kernel exhibits low compute throughput and
memory bandwidth utilization relative to peak. Achieved occupancy
is 12%. Consider increasing occupancy... → 延迟瓶颈的典型提示

这些 [Warning] 行是 ncu 帮你做的初判,直接顺着它给的方向深挖即可。 但你必须能自己验证它对不对——这正是本节练的能力。

5. 练习:读报告,下诊断

下面是 4 份 A100 上的真实 SOL 片段。凭第 3 节的决策表判断瓶颈。点选项看反馈。

💬 随时问我。 DRAM Throughput 和 Memory Throughput 有啥区别?occupancy 多少算低? 某份报告看不懂?我是你的老师,把疑问抛过来。

6. 把它接回你的 A100(等你接入环境时)

等你能访问 A100 时,完整抓取并打开报告的命令是:

nvcc -arch=sm_80 -o saxpy saxpy.cu
ncu --set full -o report ./saxpy   # 存成 report.ncu-rep
ncu-ui report.ncu-rep              # 图形界面里看 SOL + roofline 图

图形界面会把 SOL 直接画成上一节那张 roofline 图,你的 kernel 是图上一个点—— 一眼看出它贴着哪堵墙。

主源推荐(本节精读)

📘 Nsight Compute Profiling Guide — Sections & Rules ——读"GPU Speed Of Light"小节即可,它精确定义了这两个吞吐指标的含义。这是本节最高信任的来源。