Lesson 02 · CUDA 性能调优 · 把 roofline 落到真实数字
上一节你学会了用 roofline 判断瓶颈。 但真实工作里,你不会手算算术强度——你会让 Nsight Compute(ncu) 替你测, 然后读报告。调优 80% 的时间都花在读报告上。本节你将学会读懂最重要的那一段:Speed of Light(SOL)。
ncu 把 kernel 的性能压缩成两个最关键的百分比,这就是 Speed of Light 段—— "相对光速",即你跑到了硬件理论极限的百分之多少:[1]
| 指标 | 含义 |
|---|---|
Compute (SM) Throughput | 计算单元用了峰值算力的百分之几 |
Memory Throughput | 访存子系统用了峰值带宽的百分之几 |
这两个数,就是上节 roofline 的两堵墙——只不过 ncu 已经替你算好、归一化成百分比了。 你要做的不是计算,而是比较谁高。
在 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 变快,只能从访存下手: 减少读写字节、提高带宽利用(向量化、合并访问)。
把 SOL 的两个数字一比,kernel 必然落入三种情况之一。这张表是本节的核心,请记住它。
| Memory % | Compute % | 诊断 | 下一步 |
|---|---|---|---|
| 高(>60) | 低 | 访存瓶颈 | 看 Memory Workload Analysis |
| 低 | 高(>60) | 计算瓶颈 | 看 Compute Workload Analysis |
| 低 | 低 | 延迟瓶颈 | 看 Occupancy / Scheduler |
第三种——两个都低——是新手最容易看漏的。它不代表 kernel 很闲,而是说两种资源都没喂饱, 通常是并行度不够、延迟没藏住:活跃的 warp 太少,SM 在干等内存返回。 这时优化访存或计算都没用,要提高 occupancy 或指令级并行(ILP)。[1]
你甚至不必自己查表。ncu 有内置的 规则引擎(guided analysis),会在报告里直接写一句诊断, 比如:[2]
This kernel exhibits low compute throughput and
memory bandwidth utilization relative to peak. Achieved occupancy
is 12%. Consider increasing occupancy... → 延迟瓶颈的典型提示
这些 [Warning] 行是 ncu 帮你做的初判,直接顺着它给的方向深挖即可。
但你必须能自己验证它对不对——这正是本节练的能力。
下面是 4 份 A100 上的真实 SOL 片段。凭第 3 节的决策表判断瓶颈。点选项看反馈。
等你能访问 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"小节即可,它精确定义了这两个吞吐指标的含义。这是本节最高信任的来源。