WHAT, WHERE, AND WHY? USE CUDA DEVELOPER TOOLS TO DETECT, LOCATE, AND EXPLAIN BUGS AND BOTTLENECKS

JACKSON MARUSARZ
日期信息未提供

目录 (Table of Contents)

    1. 开发者工具概览 (DEVELOPER TOOLS)
    1. 计算调试器 (COMPUTE DEBUGGERS)
    2. 2.1 CUDA GDB
    3. 2.2 Nsight Visual Studio Edition
    4. 2.3 Nsight Visual Studio Code Edition
    1. 计算清理器 (COMPUTE SANITIZER)
    1. 正确性工具功能 (CORRECTNESS TOOLS FEATURES)
    1. Nsight Visual Studio Code Edition (GA版)
    2. 5.1 Nsight Visual Studio Code Edition 界面展示
    3. 5.2 Visual Studio 2022 支持
    1. Nsight Systems
    2. 6.1 主要特性 (Key Features)
    3. 6.2 Nsight Systems 详细视图
    4. 6.3 缩放/过滤感兴趣的区域
    5. 6.4 Nsight Systems 新特性
      • 6.4.1 多报告平铺 (Multi-Report Tiling)
      • 6.4.2 专家系统与统计 (Expert Systems & Statistics)
      • 6.4.3 UCX 追踪 (UCX TRACE)
      • 6.4.4 NVIDIA 网络适配器采样 (NVIDIA NETWORKING ADAPTER SAMPLING)
      • 6.4.5 GPU 直接存储支持 (GPU DIRECT STORAGE SUPPORT)
      • 6.4.6 NVTX 类别 (NVTX CATEGORIES)
      • 6.4.7 其他功能 (AND MANY MORE)
    1. Nsight Compute
    2. 7.1 Nsight Compute 介绍
    3. 7.2 引导式分析和优化
    4. 7.3 内存工作负载分析
    5. 7.4 源代码关联与热点识别
    6. 7.5 Nsight Compute 新特性
      • 7.5.1 寄存器依赖可视化
      • 7.5.2 独立源代码查看器
      • 7.5.3 占用率计算器
      • 7.5.4 分层屋脊图
      • 7.5.5 范围重放
      • 7.5.6 OptiX 加速结构查看器
    1. CUPTI (CUDA 性能分析工具接口)
    2. 8.1 CUPTI 更新
    1. ARM 平台上的 GUI 支持
    1. GTC 上的开发者工具

1. 开发者工具概览 (DEVELOPER TOOLS)

开发者工具分为几个主要类别,以支持CUDA应用的调试、性能分析和正确性检查。

开发者工具概览 Page 2
开发者工具概览 Page 2
  • 调试器 (Debuggers)

    • cuda-gdb
    • Nsight Visual Studio Edition
    • Nsight Visual Studio Code Edition
  • 性能分析器 (Profilers)

    • Nsight Systems
    • Nsight Compute
    • CUPTI
    • NVIDIA Tools eXtension (NVTX)
  • 正确性检查器 (Correctness Checker)

    • Compute Sanitizer:例如,执行 compute-sanitizer --leak-check full memcheck_demo 可检测内存分配错误、未初始化的内核、越界访问等问题。
  • IDE 集成 (IDE integrations)

    • Nsight Eclipse Edition
    • Nsight Visual Studio Edition
    • Nsight Visual Studio Code Edition

2. 计算调试器 (COMPUTE DEBUGGERS)

计算调试器用于调试在设备上运行的GPU内核。

2.1 CUDA GDB

CUDA GDB 是一个命令行和IDE后端调试器。

  • 统一的CPU和CUDA调试:支持同时调试CPU和GPU代码。
  • CUDA-C/SASS支持:为CUDA C语言和SASS(汇编)提供支持。
  • 基于GDB构建:利用许多相同的CLI命令,方便GDB用户使用。
  • 功能:支持单步执行、设置断点、内联函数调试、变量检查等。

2.2 Nsight Visual Studio Edition

为Visual Studio提供IDE集成,用于构建和调试CPU+GPU代码。

2.3 Nsight Visual Studio Code Edition

为VS Code提供新的IDE集成,用于构建和调试CPU+GPU代码。
* 支持从Windows或Linux远程调试Linux目标。

3. 计算清理器 (COMPUTE SANITIZER)

Compute Sanitizer自动扫描错误和内存问题。

  • 通过子工具检查正确性问题

    • Memcheck:内存访问错误和内存泄漏检测工具。
    • Racecheck:共享内存数据访问冲突检测工具。
    • Initcheck:未初始化的设备全局内存访问检测工具。
    • Synccheck:线程同步冲突检测工具。
  • 示例输出:执行 compute-sanitizer --leak-check full memcheck_demo 可能会报告内存泄漏、未初始化的内核执行、越界访问以及无效的全局写入等问题,并提供详细的调用栈信息。

4. 正确性工具功能 (CORRECTNESS TOOLS FEATURES)

  • OptiX在Compute Sanitizer中的支持

    • 自动发现OptiX工作负载中的正确性问题。
    • 示例输出显示了OptiX场景中因无效全局写入导致的数据损坏。
  • Compute Sanitizer中的核心转储支持

    • 在检测到问题时生成核心转储。
  • 核心转储生成性能提升5倍

5. Nsight Visual Studio Code Edition (GA版)

Nsight Visual Studio Code Edition已正式发布。

Nsight Visual Studio Code Edition 安装选项 Page 9
Nsight Visual Studio Code Edition 安装选项 Page 9
  • 安装选项
    • 通过内置的Visual Studio Code Marketplace安装。
    • 从Visual Studio Code Marketplace网站下载VSIX文件进行手动安装。

5.1 Nsight Visual Studio Code Edition 界面展示

Nsight Visual Studio Code Edition 界面概览 Page 10
Nsight Visual Studio Code Edition 界面概览 Page 10
  • 该界面展示了Nsight Visual Studio Code Edition的调试功能:
    • Variables view (变量视图)
    • GPU breakpoints (GPU断点)
    • CPU & GPU registers (CPU和GPU寄存器)
    • Watch CPU & GPU vars (监视CPU和GPU变量)
    • Session status (会话状态)
    • Exec debugger commands (执行调试器命令)
    • CUDA Call Stack (CUDA调用栈)
    • CUDA focus (CUDA焦点)

5.2 Visual Studio 2022 支持

Visual Studio 2022 Debugger Interface Page 11
Visual Studio 2022 Debugger Interface Page 11

Nsight工具也支持Visual Studio 2022,提供集成的调试体验,包括代码、汇编、线程状态、断点等。

6. Nsight Systems

Nsight Systems是一个系统级性能分析器 (System Profiler)。

6.1 主要特性 (Key Features)

  • 系统级应用算法调优

    • 支持多进程树。
    • 快速GUI时间线上可视化数百万个事件。
    • 定位优化机会,发现未使用的CPU和GPU时间。
  • 平衡多CPU和GPU的工作负载

    • 分析CPU算法、利用率和线程状态。
    • 分析GPU流、内核、内存传输等。
  • 提供命令行、独立工具和IDE集成

  • 支持的操作系统:Linux (x86, Power, Arm SBSA, Tegra), Windows, MacOSX (主机)。
  • 支持的GPU:Pascal+。
  • 文档/产品链接https://developer.nvidia.com/nsight-systems

6.2 Nsight Systems 详细视图

Nsight Systems 详细时间线视图 Page 14
Nsight Systems 详细时间线视图 Page 14

该视图展示了Nsight Systems时间线分析器的详细功能:
* Processes and threads (进程和线程)
* Thread/core migration (线程/核心迁移)
* Thread state (线程状态)
* CUDA and OpenGL API trace (CUDA和OpenGL API追踪)
* cuDNN and cuBLAS trace (cuDNN和cuBLAS追踪)
* Kernel and memory transfer activities (内核和内存传输活动)
* Multi-GPU (多GPU)

6.3 缩放/过滤感兴趣的区域

Nsight Systems 缩放/过滤功能 Page 15
Nsight Systems 缩放/过滤功能 Page 15

Nsight Systems允许用户精确地缩放和过滤时间线上的特定区域,以深入分析:
* 可以查看详细的CUDA API调用,如 cudaGraphInstantiatecudaGraphLaunch
* 显示内核的执行时间,如 cudaGraphManual
* 识别出特定事件(如 reduce 操作)在时间线上的分布和持续时间。
* 通过详细的事件信息和上下文(如 NVIDIA NVTX 事件),帮助开发者定位性能瓶颈和优化机会。

6.4 Nsight Systems 新特性

6.4.1 多报告平铺 (Multi-Report Tiling)

为了实现更多并行活动的可视化,Nsight Systems 引入了多报告平铺功能。它允许用户在时间轴上加载多个报告,并根据挂钟时间(wall-clock)进行对齐。

该功能可以将不同 CLI 会话或节点排名的报告以垂直平铺的形式展现,每个报告在水平方向上代表时间,从而形成一个 k 行 n 列的平铺视图,方便并行活动的比较和分析。
多报告平铺示意图 Page 17

用户可以打开多个报告,这些报告将基于挂钟时间加载在同一个时间轴上。这使得用户可以轻松地对比不同会话或进程的执行情况。
多报告平铺的用户界面 Page 18

6.4.2 专家系统与统计 (Expert Systems & Statistics)

Nsight Systems 提供内置的数据分析和建议功能。

专家系统可以识别潜在的性能瓶颈,并提供优化建议。例如,对于“CUDA Async Memcpy with Pageable Memory”(使用可分页内存进行 CUDA 异步内存复制)的问题,系统可能会建议:“如果适用,请使用固定内存(PINNED memory)”。此外,它还提供相应的 CLI 命令,以便用户在命令行中进行进一步分析。用户可以通过下拉菜单选择不同的专家系统检查,例如 CUDA 同步内存复制、CUDA 同步内存设置、CUDA 同步 API、CUDA GPU 饥饿、VULKAN GPU 饥饿、VULKAN GPU 低利用率等。
专家系统与统计界面 Page 19

6.4.3 UCX 追踪 (UCX TRACE)

Nsight Systems 现在支持 UCX 追踪,包括异步追踪。这允许用户在时间轴上查看 UCX API 调用,并为每个事件提供异步的开始/结束时间。
UCX 追踪界面 Page 20

6.4.4 NVIDIA 网络适配器采样 (NVIDIA NETWORKING ADAPTER SAMPLING)

该功能用于分析 NVIDIA 网络适配器,包括:
* 对 NVIDIA 网络适配器进行性能分析。
* 追踪发送/接收数据和拥塞情况。
* 将网络流量与预期的网络活动和其他系统活动进行关联分析。
NVIDIA 网络适配器采样界面 Page 21

6.4.5 GPU 直接存储支持 (GPU DIRECT STORAGE SUPPORT)

Nsight Systems 支持 GPU 直接存储,通过对 PCIe BAR1 请求和 CuFile 追踪进行 GPU 指标采样。
* 实现与 GPU 内存的直接通信。
* CUFILE API 用于 GPU 直接存储。
GPU 直接存储支持界面 Page 22

6.4.6 NVTX 类别 (NVTX CATEGORIES)

提供另一种查看注解的方式:
* NVTX 行既可以自然地(组合)显示,也可以按类别分离显示。
* 此示例按事件类型进行拆分,但类型可以在不同类别中混合。
NVTX 类别显示 Page 23

6.4.7 其他功能 (AND MANY MORE)

Nsight Systems 还包含许多其他新功能,例如:
* cuBLAS LT, XT, & cuSPARSE 追踪。
* MPI 参数追踪(src, dst, op, size...)。
* 支持 Windows 11 & Server 2022。
* Windows ISR & DPC 追踪。
* SSH 公钥认证。
* GUI 中的统计信息。
其他新功能列表 Page 24

7. Nsight Compute

7.1 Nsight Compute 介绍

Nsight Compute 是一个强大的内核性能分析工具。
NSIGHT COMPUTE 封面 Page 25

主要特点:
* 交互式 CUDA API 调试和内核性能分析。
* 内置专业知识,提供优化建议。
* 数据收集和显示完全可定制。
* 支持命令行、独立应用、IDE 集成和远程目标。

支持操作系统: Linux (x86, Power, Tegra, Arm SBSA), Windows, MacOSX (仅主机)。
支持 GPU: Volta, Turing, Ampere GPU。
文档/产品链接: https://developer.nvidia.com/nsight-compute
NSIGHT COMPUTE 概述 Page 26

7.2 引导式分析和优化

Nsight Compute 提供:
* 目标性指标部分:用户可以关注特定的性能指标区域。
* 可定制的数据收集和展示:灵活配置需要收集和显示的数据。
* 内置专业知识:提供引导式分析和优化建议,例如针对性能瓶颈的警告和详细的计算工作负载分析,帮助用户理解和改进 GPU 利用率、指令执行和内存访问模式。
引导式分析和优化 Page 27

7.3 内存工作负载分析

该工具提供:
* 可视化内存分析图表:清晰展示内存访问路径和数据流,例如从全局内存、局部内存、纹理内存、表面内存到共享内存、L1 缓存、L2 缓存和设备内存/系统内存的传输。
* 峰值性能比率指标:提供详细的共享内存、第一级缓存和 L2 缓存统计数据,包括指令数、请求数、命中率等,以评估内存性能效率。
内存工作负载分析 Page 28

7.4 源代码关联与热点识别

Nsight Compute 能够:
* 源代码/PTX/SASS 分析与关联:将性能指标与源代码、PTX 码或 SASS 码进行关联,帮助用户理解代码层面上的性能表现。
* 每条指令的源指标:详细显示每条指令的性能数据。
* 指标热图:通过颜色编码快速识别性能热点,例如在源代码或汇编代码中哪些行或指令导致了较高的延迟或资源瓶颈。
源代码关联与热点识别 Page 29

7.5 Nsight Compute 新特性

NSIGHT COMPUTE 新特性封面 Page 30
NSIGHT COMPUTE 新特性封面 Page 30

7.5.1 寄存器依赖可视化

本部分介绍了用于可视化寄存器使用和依赖链的工具。

  • SASS(Streaming Assembler)视图在源代码中显示。
  • 跟踪每个寄存器的读写操作。
  • 识别长依赖链,这有助于发现潜在的性能瓶颈。
  • 检测低效的寄存器使用模式。
  • 工具会列出以下各项的所有依赖关系:
    • 寄存器
    • 谓词
    • 统一寄存器
    • 统一谓词
寄存器依赖可视化
寄存器依赖可视化

7.5.2 独立源代码查看器

该工具提供了一个独立的源代码查看器,主要特点包括:

  • 并排显示 CUDA 核函数的汇编代码和相关联的源代码,便于理解编译器的优化。
  • 不依赖于性能分析器数据。
  • 能够直接打开 .cubin 文件进行分析。
  • 有助于识别编译器优化和潜在的低效率问题。
独立源代码查看器
独立源代码查看器

7.5.3 占用率计算器

占用率计算器用于建模硬件使用情况并识别限制因素:

  • 模拟理论硬件使用率。
  • 帮助理解硬件限制与核函数参数之间的关系。
  • 可配置模型,以改变硬件和核函数参数,评估不同设置下的性能。
  • 可以从现有报告或作为新活动进行分析。
占用率计算器
占用率计算器

7.5.4 分层屋脊图

分层屋脊图(Hierarchical Roofline)用于可视化浮点运算性能(双精度):

  • 可视化内存层次结构中的多个级别,帮助理解数据访问模式。
  • 识别由内存限制引起的性能瓶颈。
  • 确定修改算法如何(或可能不)影响性能,指导优化方向。
分层屋脊图
分层屋脊图

7.5.5 范围重放

范围重放功能允许对特定代码范围进行捕获和重放,其关键特性包括:

  • 范围标记可以使用 Profiler Start/Stop API 或 NVTX Ranges 定义。
  • 性能指标与整个定义范围相关联,而非单个核函数。
  • 允许内核无需序列化即可执行。
  • 支持对出于正确性或性能原因应并行运行的内核进行性能分析。
范围重放
范围重放

7.5.6 OptiX 加速结构查看器

OptiX 加速结构查看器提供以下功能:

  • 在启动光线追踪管线之前检查加速结构(AS)。
  • 在 3D 可视化器中导航加速结构。
  • 查看创建加速结构时使用的参数,包括:
    • 构建标志
    • 三角网格顶点
    • AABB(轴对齐包围盒)坐标
OPTIX 加速结构查看器
OPTIX 加速结构查看器

8. CUPTI (CUDA 性能分析工具接口)

CUPTI (CUDA Profiling Tools Interface) 提供了一个接口,用于收集CUDA应用程序的性能数据。

8.1 CUPTI 更新

CUPTI 的最新更新包括:

  • CUDA 图形性能分析支持。
  • CUPTI Checkpoint (保存/恢复) API。
  • OptiX 性能分析。
  • 多项性能改进。

9. ARM 平台上的 GUI 支持

即将发布的版本将支持 ARM 平台上的 GUI:

  • Nsight Systems - Nsight Compute - Nsight Visual Studio Code Edition 等 GUI 将原生运行于以下平台:

    • NVIDIA® Jetson AGX Orin™ SoC
    • SBSA
  • 用户可以使用新的原生 GUI 或现有的远程收集功能。

ARM 平台上的 GUI 支持
ARM 平台上的 GUI 支持

10. GTC 上的开发者工具

GTC (GPU Technology Conference) 提供了丰富的开发者工具相关内容:

  • 会议 (Sessions)

    • S41493 - 使用 CUDA 开发者工具检测、定位和解释错误及瓶颈。
    • S41447 - Orin 开发者工具:下一个前沿。
    • S41723 - 如何理解和优化使用 Nsight Compute 的共享内存访问。
    • S41500 - 使用 Nsight Systems 网络性能分析优化通信。
    • S41518 - 消除云怪物从未如此顺畅。
    • S41859 - 利用 NVIDIA Nsight Perf SDK 进行 GPU 性能分析和改进。
  • 实验 (Labs)

    • DLIT2169 - 使用 Nsight 性能分析工具优化 CUDA 机器学习代码。
    • DLIT2207 - CUDA 应用程序的调试与正确性分析。
    • DLIT2319 - 使用 NVIDIA Nsight Graphics 和 NVIDIA Nsight Systems 进行光线追踪的开发者工具基础。
  • 与专家联系 (Connect With Experts)

    • CWE41541 - CUDA 工具箱中有什么:CUDA 性能分析、优化和调试工具。
    • CWE41887 - 与专家联系:获取光线追踪和 NVIDIA 光线追踪开发者工具入门。
  • 开发者工具在最新版 CUDA Toolkit 中免费提供和打包。

  • 支持可通过以下方式获取:

  • 更多信息: