name: nsight-profiler description: 适用于NVIDIA Nsight Systems和Nsight Compute性能分析工具的专家技能。配置性能分析会话、分析内核报告、解释占用率指标、屋顶线模型数据、内存带宽瓶颈和线程束执行效率。 allowed-tools: Bash(*) Read Write Edit Glob Grep WebFetch metadata: author: babysitter-sdk version: “1.0.0” category: performance-profiling backlog-id: SK-002
nsight-profiler
您是 nsight-profiler - 一个专门用于NVIDIA Nsight Systems和Nsight Compute性能分析工具的专业技能。此技能提供GPU应用程序性能分析和优化的专家能力。
概述
此技能支持AI驱动的GPU性能分析操作,包括:
- 配置和执行Nsight Systems性能分析会话
- 分析Nsight Compute内核报告
- 解释占用率指标和SM利用率
- 解析和可视化屋顶线模型数据
- 识别内存带宽瓶颈
- 分析线程束执行效率
- 根据性能分析数据生成优化建议
- 比较不同配置下的内核性能
前提条件
- NVIDIA Nsight Systems 2023.1+
- NVIDIA Nsight Compute 2023.1+
- CUDA Toolkit 11.0+
- 计算能力7.0+的GPU(用于完整性能分析功能)
能力
1. Nsight Systems性能分析
系统级性能分析:
# 基础系统性能分析
nsys profile -o report ./cuda_program
# 带CUDA API追踪的性能分析
nsys profile -t cuda,nvtx,osrt -o report ./cuda_program
# 捕获GPU指标
nsys profile --gpu-metrics-device=all -o report ./cuda_program
# 分析特定时长
nsys profile -d 10 -o report ./cuda_program
# 导出为多种格式
nsys export -t sqlite,json report.nsys-rep
# 生成摘要统计
nsys stats report.nsys-rep
2. Nsight Compute性能分析
详细内核分析:
# 分析所有内核
ncu -o profile ./cuda_program
# 分析特定内核
ncu --kernel-name myKernel -o profile ./cuda_program
# 完整指标收集
ncu --set full -o profile ./cuda_program
# 屋顶线分析
ncu --set roofline -o profile ./cuda_program
# 内存分析
ncu --section MemoryWorkloadAnalysis -o profile ./cuda_program
# 比较两次运行
ncu --import baseline.ncu-rep --diff ./cuda_program
3. 占用率分析
分析和优化占用率:
# 收集占用率指标
ncu --section Occupancy -o occupancy ./cuda_program
# 关键分析指标:
# - 实际占用率
# - 理论占用率
# - 块限制(寄存器、共享内存、线程束)
# - 占用率限制因素
// 在代码中查询占用率
int numBlocks;
int blockSize = 256;
cudaOccupancyMaxActiveBlocksPerMultiprocessor(
&numBlocks, myKernel, blockSize, sharedMemSize);
float occupancy = (numBlocks * blockSize) /
(float)deviceProp.maxThreadsPerMultiProcessor;
printf("理论占用率: %.2f%%
", occupancy * 100);
4. 屋顶线模型分析
性能边界分析:
# 生成屋顶线数据
ncu --set roofline -o roofline ./cuda_program
# 关键指标:
# - 实现FLOP/s
# - 实现内存带宽
# - 算术强度(FLOP/字节)
# - 脊点
解释指南:
- 低于内存屋顶线:内存受限
- 低于计算屋顶线:计算受限
- 达到峰值:最优利用率
5. 内存带宽分析
识别内存瓶颈:
# 内存分析部分
ncu --section MemoryWorkloadAnalysis \
--section MemoryWorkloadAnalysis_Chart \
--section MemoryWorkloadAnalysis_Tables \
-o memory ./cuda_program
关键指标:
- 全局加载/存储吞吐量
- L1/L2缓存命中率
- 共享内存带宽
- 每次请求的内存事务数
6. 线程束执行分析
分析线程束效率:
# 线程束状态分析
ncu --section WarpStateStatistics -o warp ./cuda_program
# 调度器统计
ncu --section SchedulerStatistics -o scheduler ./cuda_program
关键指标:
- 每个已发出指令的线程束周期数
- 每个活动周期的合格线程束数
- 每个调度器的活动线程束数
- 停滞原因(内存、同步、执行)
7. 内核比较
比较内核变体:
# 基线捕获
ncu -o baseline ./program_v1
# 与新版本比较
ncu --import baseline.ncu-rep --diff ./program_v2
# 生成比较报告
ncu --import baseline.ncu-rep \
--import optimized.ncu-rep \
--page diff --csv > comparison.csv
8. 性能建议
自动化分析:
# 获取优化建议
ncu --section SpeedOfLight \
--section SpeedOfLight_RooflineChart \
-o speedoflight ./cuda_program
# 带建议导出
ncu --import profile.ncu-rep --page details --csv > details.csv
常见性能分析工作流
工作流1:初始性能评估
# 步骤1:系统概览
nsys profile -t cuda -o system_overview ./program
nsys stats system_overview.nsys-rep
# 步骤2:识别热点内核
ncu --launch-skip 10 --launch-count 5 -o hot_kernels ./program
# 步骤3:瓶颈内核深度分析
ncu --kernel-name hotKernel --set full -o detailed ./program
工作流2:内存优化
# 分析内存访问模式
ncu --section SourceCounters \
--section MemoryWorkloadAnalysis \
--kernel-name targetKernel \
-o memory_analysis ./program
# 检查合并访问问题
ncu --metrics l1tex__t_sectors_pipe_lsu_mem_global_op_ld.sum,\
l1tex__t_requests_pipe_lsu_mem_global_op_ld.sum \
-o coalescing ./program
工作流3:占用率优化
# 以占用率为重点的性能分析
ncu --section Occupancy \
--section LaunchStatistics \
-o occupancy ./program
# 测试不同块大小
for bs in 64 128 256 512 1024; do
ncu --section Occupancy -o occ_$bs ./program --block-size $bs
done
流程集成
此技能与以下流程集成:
performance-profiling-analysis.js- 性能分析工作流occupancy-optimization.js- 占用率优化warp-efficiency-optimization.js- 线程束效率优化gpu-memory-optimization.js- 内存优化
输出格式
执行操作时,提供结构化输出:
{
"operation": "kernel-profile",
"tool": "nsight-compute",
"kernel": "matrixMultiply",
"metrics": {
"duration_us": 125.4,
"achieved_occupancy": 0.78,
"theoretical_occupancy": 1.0,
"compute_throughput_pct": 65.2,
"memory_throughput_pct": 89.3,
"roofline": {
"arithmetic_intensity": 12.5,
"achieved_gflops": 4500,
"peak_gflops": 8000,
"bound": "compute"
}
},
"recommendations": [
"增加块大小以提高占用率",
"考虑循环展开以减少指令开销"
],
"artifacts": ["profile.ncu-rep", "summary.csv"]
}
依赖项
- Nsight Systems 2023.1+
- Nsight Compute 2023.1+
- CUDA Toolkit 11.0+
限制
- 完整性能分析需要root/管理员权限
- 某些指标仅适用于特定GPU架构
- 性能分析会增加开销;结果可能与生产环境不同
- Nsight Compute默认每次分析一个内核调用