Nsight Compute kernel 分析:看吞吐、内存、occupancy 与 warp stall,定位单个 kernel 的瓶颈
Nsight Compute(ncu)是 NVIDIA 的 kernel 级性能分析器。它针对单个 CUDA kernel 采集硬件计数器,给出计算/内存吞吐、occupancy、warp stall、指令混合、缓存命中、寄存器和源码级指标。它回答“这个 kernel 是算力受限、带宽受限还是延迟受限”“为什么 occupancy 上不去”“哪条指令在等内存”。
ncu 需要 replay kernel 多次来采集不同指标,开销很大,不适合直接跑完整训练。典型流程:先用 nsys 找到耗时 kernel,再用 ncu 只分析这个 kernel 的少量 launch。
# 采集完整指标集,生成报告
ncu --set full -o report ./app
# 只分析匹配名字的 kernel,限制 launch 次数
ncu --kernel-name regex:gemm --launch-count 1 ./app
# 只看指定指标
ncu --metrics sm__throughput.avg.pct_of_peak_sustained_elapsed,\
dram__throughput.avg.pct_of_peak_sustained_elapsed ./app
# 采集后打开图形界面
ncu-ui report.ncu-rep
# 按 launch skip/count 控制采样范围
ncu --launch-skip 10 --launch-count 1 ./app
# 查看可用 section
ncu --list-sections
# 只采集 SpeedOfLight 和 Occupancy
ncu --section SpeedOfLight --section Occupancy ./app
分析时先看 SpeedOfLight 判断 compute/memory 哪个接近峰值,再看 MemoryWorkloadAnalysis、Occupancy、SchedulerStats、WarpStateStats,最后用 SourceCounters 定位到源码行。
ncu 当系统分析器:它只看 kernel,不看 CPU、数据加载和通信时间线;系统级问题先用 nsys。--kernel-name、--launch-count、--launch-skip 缩小范围。ncu 默认只跟一个进程/设备;多卡要分别采集或用 --target-processes all。-lineinfo 时只能看到 SASS;需要源码级定位时重新编译并保留符号。合上页面,先回答,再展开对照。
ncu,什么情况下用 nsys?ncu 为什么要 replay kernel?这对性能数字有什么影响?occupancy 很高但 kernel 仍然慢,可能是什么原因?nsys 看系统时间线、找耗时 kernel 和重叠问题;确定具体 kernel 后,用 ncu 分析其计算/内存吞吐、occupancy 和 stall。ncu 会多次 replay kernel;replay 会改变缓存/时钟状态并增加开销,不能把耗时直接当真实性能。WarpStateStats、MemoryWorkloadAnalysis 和源码指标判断。
小程序版
微信扫码,随时查命令