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

JACKSON MARUSARZ
日期信息未提供

目录 (Table of Contents)

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

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

开发者工具概览 Page 2
开发者工具概览 Page 2

2. 计算调试器 (COMPUTE DEBUGGERS)

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

2.1 CUDA GDB

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

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自动扫描错误和内存问题。

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

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

5.1 Nsight Visual Studio Code Edition 界面展示

Nsight Visual Studio Code Edition 界面概览 Page 10
Nsight Visual Studio Code Edition 界面概览 Page 10

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)

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 寄存器依赖可视化

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

寄存器依赖可视化
寄存器依赖可视化

7.5.2 独立源代码查看器

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

独立源代码查看器
独立源代码查看器

7.5.3 占用率计算器

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

占用率计算器
占用率计算器

7.5.4 分层屋脊图

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

分层屋脊图
分层屋脊图

7.5.5 范围重放

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

范围重放
范围重放

7.5.6 OptiX 加速结构查看器

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

OPTIX 加速结构查看器
OPTIX 加速结构查看器

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

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

8.1 CUPTI 更新

CUPTI 的最新更新包括:

9. ARM 平台上的 GUI 支持

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

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

10. GTC 上的开发者工具

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