概述

CUDA 性能分析工具接口 (CUPTI) 提供了一个基于 C 的接口,用于创建为 CUDA 应用程序设计的性能分析和跟踪工具。CUPTI 提供了以下 API:活动 API回调 API主机性能分析 API范围性能分析 APIPC 采样 APISASS 指标 APIPM 采样 API检查点 API性能分析 API事件 API指标 API。使用这些 API,您可以开发性能分析工具,以深入了解 CUDA 应用程序的 CPU 和 GPU 行为。CUPTI 安装包包含多个 示例,演示了这些 API 的使用。CUPTI 在 CUDA 支持的所有平台上均以动态库的形式交付。在 Linux (x86_64) 和 ARM 服务器 (arm64 SBSA) 上,还提供了静态库。

在本 CUPTI 文档中,跟踪 是指在 CUDA 应用程序执行期间,收集 CUDA 活动(例如 CUDA API、内核启动和内存复制)的时间戳和其他信息。通过告诉您程序哪些部分需要花费最多时间,跟踪有助于识别 CUDA 代码的性能问题。可以使用活动回调 API 收集跟踪信息。

在本 CUPTI 文档中,性能分析 是指收集单个内核或一组隔离内核的 GPU 性能指标。此过程可能涉及内核或整个应用程序的多次重放,以收集全面的 GPU 性能数据。对于 Volta 及更早版本的 GPU 架构,可以使用 CUPTI 事件指标 API 收集这些指标。对于 Volta 及更高版本的 GPU 架构,范围主机性能分析 API 取代了此功能。有关更多详细信息,请参阅 性能分析 API 的演变 部分。SASS 指标 API 在源代码级别收集内核性能指标。PM 采样 API 通过以固定间隔定期采样 GPU 的性能监视器 (PM) 来收集指标。warp 程序计数器和 warp 调度器状态的定期采样是使用 PC 采样 API 捕获的。

表 1. CUPTI API 描述

CUPTI API

功能描述

活动

异步记录 CUDA 活动,例如 CUDA API、内核、内存复制

回调

CUDA 事件回调机制,用于通知订阅者已执行特定的 CUDA 事件,例如“进入 CUDA 运行时内存复制”

主机性能分析

用于枚举、配置和评估性能指标的主机 API

范围性能分析

用于收集执行范围的性能指标的目标 API

PC 采样

warp 程序计数器和 warp 调度器状态(停顿原因)的采样

SASS 指标

使用 SASS 补丁在源代码级别收集内核性能指标

PM 采样

通过以固定间隔定期采样 GPU 性能监视器 (PM) 来收集硬件指标

性能分析

用于收集执行范围的性能指标的目标 API。主机操作 - 指标的枚举、配置和评估由 Perfworks 指标 API 支持。

事件

收集内核执行的内核性能计数器

指标

收集内核执行的内核性能指标

检查点

提供对自动保存和恢复 CUDA 设备功能状态的支持

CUPTI Python

CUPTI Python 是一个库,提供 Python API,用于创建专门为 CUDA Python 应用程序设计的性能分析和跟踪工具。当前版本支持 CUPTI C 活动和回调 API 的子集。请务必注意,此库仅适用于 Linux (x86_64) 平台。对于有兴趣使用 CUPTI Python 的开发人员,建议参考 https://pypi.ac.cn/project/cupti-python/ 上的官方文档,以获取有关其功能和使用说明的更详细信息。

CUPTI 性能分析 API 与 NVIDIA Nsight Perf SDK

CUPTI 性能分析 APICUPTI 范围性能分析 API 支持 CUDA 内核的性能分析,这些 API 允许在 CUDA 上下文级别收集特定内核或内核范围的 GPU 性能指标。NVIDIA Nsight Perf SDK 支持图形 API(即 DirectX、Vulkan、OpenGL),允许在图形设备、上下文和队列级别收集 GPU 性能指标。NVIDIA Nsight PerfSDK 和 CUPTI 性能分析 API 都共享主机 API(即指标枚举、配置和评估),但它们在设备上针对的 GPU API 方面有所不同。