Tools2_Nsight_Compute使用指南
Tools(2): Nsight Compute 使用指南
作者: 紫气东来
发布时间: 编辑于 2025-07-09 11:17・上海
原文链接: https://zhuanlan.zhihu.com/p/715022552
文章概要
本文是CUDA性能分析工具Nsight Compute的完整使用指南,从安装、profile生成到详细的性能分析报告解读,提供了系统性的实战教程。
核心内容
1. Nsight Compute 基础
工作原理:
- 将测量库插入到应用程序进程中
- 拦截与CUDA用户模式驱动程序的通信
- 检测内核启动时从GPU收集性能指标
- 将结果传输回前端进行分析
基本使用命令:
ncu --set full -o output_name python3 script.py
输出文件:生成.ncu-rep文件,可在本地用Nsight Compute GUI打开
2. Profile 分析框架
2.1 Summary(概览页)
关键指标:
- Estimated Speedup: 优化该kernel可能带来的加速比
- Duration: 函数执行时间
- Compute Throughput: SM吞吐量(计算密集度)
- Memory Throughput: 内存吞吐量(内存密集度)
- Registers: 每线程寄存器数量
- Grid/Block Size: 启动配置
快速判断:
- Memory-bound: Memory Throughput >> Compute Throughput
- Compute-bound: Compute Throughput >> Memory Throughput
2.2 GPU Speed Of Light Throughput
核心功能:定位kernel在roofline模型中的位置
关键指标:
- Compute Throughput: 计算单元利用率
- Memory Throughput: 整体内存利用率
- L1/L2 Cache Throughput: 各级缓存利用率
- DRAM Throughput: 显存带宽利用率
分析要点:
- 计算吞吐量 > 内存吞吐量 → Compute-bound
- L1吞吐量包含Shared Memory统计
- L2和DRAM吞吐量低表明有优化空间
2.3 Memory Workload Analysis
核心指标:
Memory Throughput: 每秒DRAM访问字节数
L1/TEX Hit Rate:
- 为0可能原因:
- 使用
ld.cg指令直接从L2读取 - 主要使用Shared Memory,L1利用率低
- 使用
L2 Hit Rate: L2缓存命中率(理想值>80%)
Memory Chart: 可视化各级存储层次的连接关系和使用情况
2.4 Compute Workload Analysis
IPC指标:
- Executed IPC Elapsed: 每周期执行的指令数
- Executed IPC Active: 活跃周期的IPC
- Issued IPC Active: 发射的IPC
计算单元利用率:
- FMA: 融合乘加单元(矩阵运算核心)
- ALU: 算术逻辑单元(位运算、整数运算)
- LSU: 加载存储单元(内存访问)
- TMA: 张量内存访问单元(高效数据传输)
- TEX: 纹理单元
- XU: 超越函数单元(sin、cos等)
3. 调度与并行分析
3.1 Scheduler Statistics
关键概念:
- Theoretical Warps: 理论最大warp数(由启动配置决定)
- Active Warps: 实际活跃的warp数
- Eligible Warps: 准备好发射指令的warp数
- Issued Warps: 实际发射指令的warp数
性能指标:
- Active Warps Per Scheduler: 平均活跃warp数
- Eligible Warps Per Scheduler: 平均可发射warp数
- No Eligible %: 无可发射warp的周期占比(越低越好)
优化方向:
- 减少warp阻塞时间
- 提高eligible warps数量
- 降低issue slot浪费
3.2 Warp State Statistics
分析目标:找出warp停顿的主要原因
常见停顿类型:
- Not Selected: 未被调度器选中(说明并行度足够)
- Wait: 等待依赖指令完成
- Memory Throttle: 内存访问限流
- Execution Dependency: 执行依赖
- Synchronization: 同步等待
优化策略:
- 大量Not Selected → 可考虑减少活跃warp数以提高缓存局部性
- 大量Wait → 优化指令依赖关系
- Memory Throttle → 优化内存访问模式
4. Occupancy(占用率)分析
定义:每个SM上活跃warp数与最大可能warp数的比率
影响因素:
- 每线程寄存器数量: 过多会限制并行度
- Block Size: 存在最优值
- Shared Memory用量: 影响可同时运行的block数
优化原则:
- 占用率不是越高越好
- 低占用率会降低延迟隐藏能力
- 需要在资源使用和并行度之间权衡
实战价值
分析流程
- Summary页快速定位:找出耗时最长的kernel
- Speed Of Light判断类型:Compute-bound还是Memory-bound
- 针对性深入分析:
- Memory-bound → 分析Memory Workload
- Compute-bound → 分析Compute Workload
- 调度分析:检查warp利用率和停顿原因
- 占用率优化:调整启动配置
关键技巧
- L1 Hit Rate为0不一定是问题
- L2 Hit Rate是重要优化指标
- Warp State Statistics指出具体优化方向
- Memory Chart提供直观的内存层次视图
总结
Nsight Compute是CUDA性能优化的核心工具。本文提供了从基础使用到深度分析的完整指南,涵盖了Summary、Speed Of Light、Memory/Compute Workload、Scheduler Statistics、Warp State、Occupancy等所有关键分析维度。通过系统学习这些指标的含义和分析方法,可以精准定位性能瓶颈,指导CUDA kernel的优化工作。文章结合具体案例,展示了如何从profile数据中提取有价值的优化信息。