SuperAPI AI 工具集

cuda-profiling

通用与其它

查看项目

更新于 10-16 01:19

技能介绍

用途:指导代理对 CUDA 应用进行性能剖析,使用 Nsight Systems(时间线级)与 Nsight Compute(内核级指标),通过 NCU 命令行自动采集指标、解读 roofline 模型,并诊断内核属于内存受限还是计算受限。

适用时机:内核比预期慢需定位瓶颈;比较不同内核变体(分块策略、block 大小);用 ncu 指标构建 CI 性能回归检查;在多流流水线中关联 CPU 与 GPU 活动;用 NVTX 标注应用阶段以便时间线可见;解读占用率、内存吞吐与 SM 利用率指标。

主要能力与用法:

  1. 选择工具:系统级时间线(CPU+GPU+CUDA API)用 Nsight Systems(nsys);单内核深度指标用 Nsight Compute(ncu);CI 中快速取指标用 ncu --metrics。
  2. 时间线剖析:nsys profile --trace=cuda,nvtx,osrt --output=report ./my_cuda_app;用 nsys-ui report.nsys-rep 打开,或用 nsys stats report.nsys-rep 查看 CLI 摘要。关注内核启动间隙、cudaDeviceSynchronize 停顿、跨流 H2D 拷贝与内核执行的重叠、CUDA API 调用开销。
  3. NVTX 范围标注:包含 nvtx3/nvToolsExt.h,用 nvtxRangePushA/nvtxRangePop 标注 H2D 拷贝、内核、D2H 拷贝等阶段,编译时链接 -lnvToolsExt 或使用 nvtx3 头文件,范围在 Nsight Systems 中显示为彩色条带。
  4. 内核分析:ncu -o kernel_report ./my_cuda_app;按名称过滤 ncu --kernel-name regex:matmul_tiled ./my_cuda_app;用 ncu-ui kernel_report.ncu-rep 打开。报告关键部分包括 Speed of Light(SM 吞吐 vs 内存吞吐 vs 峰值)、Occupancy、Memory Workload Analysis(L1/L2 命中率、合并效率)、Warp State Statistics(停顿原因)。
  5. NCU CLI 指标:可采集 sm__throughput、dram__throughput、sm__warps_active、l1tex 全局加载扇区、FFMA 指令数等;用 --csv 导出供 CI 使用;用 --kernel-replay-mode application 设置内核重放模式以获得准确计数器。
  6. 内存受限与计算受限诊断:dram 吞吐接近峰值而 sm 吞吐低为内存受限,修复方向为合并访问、共享内存分块、减少流量;sm 吞吐接近峰值而 dram 低为计算受限,修复方向为张量核心、循环展开、ILP;两者都低则检查启动配置、占用率或同步开销。算术强度可用 FFMA 指令数乘 2 除以 dram 字节数估算。
  7. 占用率分析:采集 sm__warps_active 及寄存器、共享内存、block 大小等占用限制指标;寄存器受限可用 -maxrregcount 或简化内核,共享内存受限可减小分块或拆分阶段,block 大小可尝试 128 或 256。
  8. 工作流清单:用 nvcc -lineinfo -O3 -arch=sm_80 构建(非调试不用 -G);先做时间线,再对热点内核深入分析,最后对比前后指标。

常见问题:ERR_NVGPUCTRPERM 为权限不足,可用 sudo 或设置 NVreg_RestrictProfilingToAdminUsers=0;指标全为零需检查 CUDA_VISIBLE_DEVICES 并使用 --target-processes all;NCU 报告为空可能是内核过短或未启动;剖析开销过大可用 --kernel-name 过滤与 --launch-skip;时间线无重叠通常是单默认流,需创建多流并使用异步拷贝;占用率正常但内核慢需检查内存合并与活跃 warp 数。

限制:资料未提供该技能的安装方式、收费、支持平台与具体版本要求,暂未提供。