参考视频:【CUDA进阶】深入理解 Nsight System 和 Nsight Compute
1. Overview
- Nsight Systems:一个系统范围的性能分析工具
- Nsight Compute:一个用于 CUDA 应用的交互式内核分析器
2. Nsight System
2.1. Overview
系统范围的应用算法调优
- 专注于应用的算法——一种独特的视角
- 能够捕捉 CPU 和 GPU 上的事件及其交互
定位优化机会
- 查看未使用的CPU和GPU时间的空隙,以及同步的开销
在多个CPU和GPU之间平衡工作负载
- CPU算法、利用率和线程状态
- GPU流、内核、内存传输等
支持Linux和Windows,x86-64和Tegra。仅支持Mac作为主机。
2.2. Key Features
Compute
- CUDA API. Kernel launch and execution correlation
- Libraries: cuBLAS, cuDNN, TensorRT
- OpenACC
Graphics
- Vulkan, OpenGL, DX11, DX12, DXR, V-sync
OS Thread state and CPU utilization, pthread, file I/O, etc.
User annotations API (NVTX)
2.3. Cpu Threads: Thread Activities
得到对每个线程活动的总览
- Which core the thread is running and the utilization
- CPU state and transition
- OS runtime libraries usage: pthread, file I/O, etc.
- API usage: CUDA, cuDNN, cuBLAS, TensorRT, …
2.4. OS Runtime Libraries
- 识别线程被阻塞的时间段及其原因
- 定位潜在的冗余同步
- 追踪耗时调用至操作系统运行时库(栈)
2.5. CUDA API
跟踪操作系统线程上的CUDA API调用
- 查看 kernel 何时被调度
- 查看内存操作何时开始
- 定位对应的 CUDA 工作负载在 GPU 上的情况
2.6. NVTX
- NVIDIA工具扩展(NVTX)用于在时间线中标注应用程序的逻辑
- 帮助在算法上下文中理解性能分析器的输出
使用方法:
- C++
- 包含头文件:
#include "nvToolsExt.h"
- 调用API函数:在源代码中调用NVTX的API函数。
- 在编译器命令行中链接NVTX库:
-lnvToolsExt
- 包含头文件:
- 也支持 Python
- CuPy:参考文档链接 CuPy文档
- TensorFlow:参考官方博客 TensorFlow性能日志插件
示例:
#include "nvToolsExt.h"
...
void myfunction( int n, double * x )
{
nvtxRangePushA("init_host_data");
//initialize x on host
init_host_data(n,x,x_d,y_d);
nvtxRangePop();
}
...
3. Nsight Compute
交互式内核分析器
- 图形化分析报告,例如 SOL(SM Occupancy Level)和内存图表
- 基于基准对一个或多个报告的结果进行比较
- 快速数据收集
UI 可执行文件名为 nv-nsight-cu
,命令行工具为 nv-nsight-cu-cli
支持的 GPU 架构:Volta、Turing、Ampere