在高性能计算(HPC)和 AI Infra 领域,如果说 Nsight Systems (nsys) 是宏观的“战术地图”,那么 Nsight Compute (ncu) 就是微观的“显微镜”。要想把 CUDA Kernel 的性能榨干,必须学会用 ncu 分析指令级瓶颈。

作为一个 Windows + WSL2 党,我在配置 ncu 时踩了不少坑。本文总结了如何在 WSL2 环境下正确安装、配置权限、并生成可视化报告的全流程。

0. 核心架构思路:Host-Target 分离

在 WSL 环境下,最佳的使用方式不是在 Linux 里强行装 GUI,而是采用 分离模式

  • Host (Windows 端): 安装带有 GUI 的 Nsight Compute,负责打开文件、查看图表。

  • Target (WSL 端): 安装 CLI (命令行版) 工具,负责在运行时抓取数据。

1. 环境准备与安装

Step 1: Windows 端 (Host) 前往 NVIDIA 官网下载并安装 Windows 版的 Nsight Compute。这是我们的查看器。

Step 2: WSL 端 (Target) 通常 CUDA Toolkit 默认包含了 ncu。检查一下:

Bash

ncu --version
# 如果显示版本号 (如 2025.4),说明已安装

如果没有安装,请去官网下载 Linux 版的 .run 文件,使用 sudo sh xxx.run 安装(注意:不要安装驱动,只选 Tool)。


2. 遇到的两大“拦路虎”及解决方案

这是最容易卡住的地方,请务必注意。

坑点一:Sudo 找不到命令

当我尝试运行 sudo ncu 时,报错 command not found原因: sudo 运行时会重置环境变量,导致它找不到普通用户 PATH 里的 ncu

✅ 解决方案:使用全路径 先找到 ncu 在哪:

Bash

which ncu
# 输出示例:/usr/local/cuda/bin/ncu

然后用全路径运行 sudo:

Bash

sudo /usr/local/cuda/bin/ncu ...
坑点二:ERR_NVGPUCTRPERM 权限报错

运行后报错:The user does not have permission to access NVIDIA GPU Performance Counters... 原因: WSL 的 GPU 实际上是 Windows 显卡的映射,Windows 驱动默认锁住了底层性能计数器的访问权限。

✅ 解决方案:在 Windows 端“开锁”

  1. 打开 Windows 的 NVIDIA Control Panel (控制面板)

  2. 菜单栏选择 Developer -> Manage GPU Performance Counters

  3. 勾选 "Allow access to the GPU performance counters to all users"

  4. 点击 Apply。 (这一步做完,WSL 里通常就一路绿灯了!)


3. 实战:抓取 Reduce 算子性能报告

假设我们有一个优化中的 CUDA 程序 reduce_test

第一步:编译(关键参数) 必须加上 -lineinfo,否则后续在 GUI 里无法将汇编指令映射回 C++ 源码。

Bash

nvcc -o reduce_test reduce_v1.cu -lineinfo

第二步:Profiling(抓取数据) 在 WSL 终端运行以下指令:

Bash

# --set full: 收集全量指标(Roofline, Memory Workload, Warp State 等)
# -o: 指定输出文件名
# -f: 强制覆盖旧文件

sudo /usr/local/cuda/bin/ncu --set full -o reduce_analysis -f ./reduce_test

等待程序运行结束(因为收集指标多,程序会被重播约 30-50 次,耗时比正常运行长是正常的)。


4. 可视化:不要掉进“打开工程”的陷阱

这是我最后踩的一个坑。数据生成了,文件就在那,但 Nsight Compute 就是看不见。

问题现象: 点击 File -> Open Project,在 WSL 路径下找不到 .ncu-rep 文件。

✅ 正确操作:

  1. 点击 File -> Open File (注意是 Open File,不是 Project)。

  2. 或者在文件过滤器中,将默认的 Project Files (*.ncu-proj) 改为 Nsight Compute Reports (*.ncu-rep)

  3. 输入 WSL 路径(如 \\wsl.localhost\Ubuntu\home\username\...)直接打开

  4. 先输入 \\swl$ 进入虚拟机

  5. 找到对应的文件

  6. 打开,出现下图即为成功


5. 总结

现在,我们终于可以在 Windows 上优雅地分析 WSL 里的 CUDA 代码了。打开报告后,通过 Speed of Light 面板查看算力和带宽利用率,配合 Source View 里的指令级分析,所有的性能瓶颈(Memory Bound 还是 Compute Bound)都将无所遁形。

Next Step: 下一步就是针对报告中的 Warp Divergence 问题,对我的 Reduce 算子进行 v2 版本的优化!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐