Magnus Strengert | GTC2023 | 03/23/23
NVIDIA Nsight 是一套工具,旨在帮助开发者调试和优化其应用程序。该套件包括:
这些工具可以协同工作。例如,开发者可以使用 Nsight Systems 进行系统级分析以识别 GPU 瓶颈,然后深入到 Nsight Compute 对特定的 CUDA 核函数进行详细分析,或使用 Nsight Graphics 调试图形 API 调用。
本次演讲的重点是 Nsight Compute,这是一款用于 CUDA 和 OptiX 应用程序的交互式性能分析器。
Nsight Compute 提供了丰富的功能,帮助开发者理解和优化其核函数:
本节通过现场演示展示了如何使用 Nsight Compute 的报告界面进行导航,并利用其引导分析功能来识别性能瓶颈。
Nsight Compute 即将推出多项新功能,旨在进一步提升用户体验和分析效率。
预估加速计算 (Estimated Speedup Calculations)
摘要页面工作流改进 (Summary Page Workflow Improvements)
基线值指示器 (Baseline Value Indicators)
这张幻灯片展示了 NVIDIA Nsight Compute 工具的界面,这是一个现场演示,重点关注“指令执行指标”。该界面集成了源代码、汇编代码以及性能指标,帮助开发者分析 CUDA 内核的执行情况。
Warp 暂停聚合指标通过对程序计数器 (PC) 和 Warp 暂停状态进行采样来收集数据。
--sampling-interval 参数手动配置。smsp__pcsamp_interval_cycles 指标的形式记录在报告中。
Barrier (栅栏), Branch_Resolving (分支解析), Dispatch (分派), Drain (耗尽), LG (局部/全局), Long_Sb_Math, Membar, MIO (多输入输出), Misc (其他), No_Inst (无指令), Short_Sb, Sleep, Tex (纹理), Wait (等待)。Not_Selected (未被选中)。Selected (被选中)。
采样计数 (Sample Count):
smsp__cycles_active.maxdevice__attribute_multiprocessor_countsmsp__pcsamp_interval_cyclessmsp__pcsamp_sample_countsmsp__cycles_active.max / smsp__pcsamp_interval_cycles * device__attribute_multiprocessor_count与详情页中“暂停原因”指标的比较:
smsp__stall_*_sum 指标的总和可以通过以下两种方式近似计算:smsp__cycles_active.sum * smsp__warps_active.avg.per_cycle_activesmsp__warps_active.sum本案例展示了如何使用上述指标进行分析。
smsp__cycles_active.max = 657,043 周期device__attribute_multiprocessor_count = 46 个 SMsmsp__pcsamp_interval_cycles = 1,024 周期实际值 smsp__pcsamp_sample_count = 29,046 次采样,与估算值非常接近。
估算总暂停周期:
smsp__cycles_active.sum * smsp__warps_active.avg.per_cycle_active ≈ 1,214,398,035smsp__warps_active.sum = 1,217,807,035两者结果相近,验证了指标的有效性。
聚合暂停估算:
此演示展示了 Nsight Compute 中更深入的分析视图,结合了 Warp 暂停聚合、L2 内存指标以及寄存器依赖关系。
Long Scoreboard (长记分板) 和 MIO Throttle (MIO 节流)。
本节总结了在 Nsight Compute 的 Source Page(源代码页)上可用的关键指标类别及其用途。
指令执行指标 (Instructions Executed Metrics)
Warp 暂停聚合 (Warp Stalls Aggregates)
内存指标 (Memory Metrics)
该页面展示了 NVIDIA Nsight Compute 工具的实时演示截图,重点介绍了其在源代码、SASS 指令集和性能指标之间进行关联分析的能力。
演示界面分为几个关键部分:
- 左侧: 显示高级语言(如 Python 或 C++)的源代码。
- 中间: 展示了内联函数表、函数级统计数据以及指标的相对模式。
- 右侧: 详细列出了与源代码行对应的 SASS(Shader Assembly)指令。每一行 SASS 指令都附有详细的性能指标,例如“已执行指令数”(Instructions Executed)和“停顿采样”(Stall Sampling),并以百分比形式展示了其在全局(Global)和共享(Shared)资源中的占比。
该演示旨在说明 Nsight Compute 如何帮助开发者直观地理解其高级代码在 GPU 上的底层执行情况,并精确定位性能瓶颈。
在编译阶段启用代码关联以获得全部优势
sum(),用于计算所有相关 SASS 指令的指标总和。max() 函数。在关注高级语言的同时,对生成的汇编代码有基本的理解将大有裨益
使用源页面提供的多种指标聚合和过滤功能
按源代码行进行引导式分析 (Guided Analysis per Source Line)
初步可检测的问题:
完全可通过现有的规则系统 (Rules System) 进行定制。
技术支持可通过以下途径获取:
更多信息请访问:
相关会议 (Sessions)
SS1205: 从宏观到微观 - CUDA 开发者工具在任何规模下查找和修复问题SS1421: 规模化优化:调查和解决多节点工作负载的隐藏瓶颈SS1882: 使用 Nsight Compute 的源页面更快地编写高性能 CUDA 核函数S51772: 调试 CUDA:CUDA 正确性工具概述S51230: Orin 性能实体构建与 Nsight 开发者工具SE52434: Jetson Edge AI 开发者日:使用 NVIDIA Nsight 开发者工具充分利用您的 Jetson Orin
实验课程 (Labs)
DLITS1143: 使用 Nsight 分析工具高效掌握常见优化模式DLITS1202: 调试和分析 CUDA 应用程序的正确性DLITS1580: 使用 Nsight Graphics 和 Nsight Systems 进行光线追踪开发
与专家交流 (Connect with Experts)
CWES52036: 您的 CUDA 工具箱中有哪些新功能?用于最新架构的 CUDA 分析、优化和调试工具CWES52009: 使用您的 NVIDIA 开发者工具来优化光线追踪