CUDA 学习记录--------在 WSL2 环境下搭建 NVIDIA Nsight Compute (ncu) 避坑指南
在高性能计算(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 端“开锁”
-
打开 Windows 的 NVIDIA Control Panel (控制面板)。
-
菜单栏选择 Developer -> Manage GPU Performance Counters。
-
勾选 "Allow access to the GPU performance counters to all users"。
-
点击 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 文件。
✅ 正确操作:
-
点击 File -> Open File (注意是 Open File,不是 Project)。
-
或者在文件过滤器中,将默认的
Project Files (*.ncu-proj)改为Nsight Compute Reports (*.ncu-rep)。 -
输入 WSL 路径(如
\\wsl.localhost\Ubuntu\home\username\...)直接打开 -
先输入 \\swl$ 进入虚拟机

-
找到对应的文件

-
打开,出现下图即为成功

5. 总结
现在,我们终于可以在 Windows 上优雅地分析 WSL 里的 CUDA 代码了。打开报告后,通过 Speed of Light 面板查看算力和带宽利用率,配合 Source View 里的指令级分析,所有的性能瓶颈(Memory Bound 还是 Compute Bound)都将无所遁形。
Next Step: 下一步就是针对报告中的 Warp Divergence 问题,对我的 Reduce 算子进行 v2 版本的优化!
更多推荐



所有评论(0)