摘要/结论

<aside>

总体流程是:先看宏观吞吐确定算子属于计算绑定还是内存绑定;再分析资源限制和调度器状态,确认有无足够并行度;接着深入查找具体 stall 类型、缓存命中率和指令流水线利用率;最后追踪到不平衡的工作分布和源代码行,从而制定针对性的优化措施。

</aside>

具体内容

一、宏观体检:GPU Speed Of Light Throughput

Nsight Compute 的 Speed Of Light Throughput 报告提供了计算和内存吞吐率的高层视图,每个单元的数值表示实际吞吐与理论峰值的百分比。高吞吐率意味着相应单元充分利用,而低吞吐率表示资源闲置或延迟隐藏失败。建议按以下步骤解读:

  1. 比较 compute vs memory throughput:计算吞吐占比更高表示算子计算密集;内存吞吐占比高则说明内存带宽是主要瓶颈。若二者都低,说明 GPU 未“喂饱”,可能存在长延迟未被隐藏。
  2. 延迟警告:当计算与内存吞吐都低于 60% 时,需要查看下一级的调度器和占用率,确认是工作量太小还是瓶颈导致 stall 多。
  3. 配合 Roofline 图:Nsight Compute 还提供 roofline 分析,根据算子的算术强度(AI=flops/byte)判断理论性能上限。若算子位于带宽受限区,可考虑数据复用或算子融合提升 AI;若算子位于计算受限区,则需优化算法或并行度。

二、资源瓶颈分析:Occupancy 与 Scheduler Statistics

为了隐藏内存和执行延迟,GPU 需要有足够数量的活跃 warps。Nsight Compute 的 Occupancy 部分显示理论和实际占用率:

Scheduler Statistics 提供调度器层面的视图: