1. 问题
最近尝试写一些 cuda code, 然后发现在跟随教程使用 nvprof 工具进行性能分析时始终报错:
‘No kernels were profiled. No API activities were profiled.’
详情为:
始终没办法获取到和教程结果一致的 profiler 信息。
2. 解决办法
2.1 使用 nsys nvprof 代替 nvprof
nsys 似乎也是进行 GPU 性能分析的工具,但本地使用该命令后,产生了两个无法正常打开的数据库文件:
可能在以后的开发过程中可以用到,但目前并不能解决我这个初学者的问题。
2.2 使用 sudo 权限
该问题是由于,网上都说新的 nvprof 不能在非 root 权限下使用,但上面的报错内容也并没有提到 permisson 的问题,果然试了以后并没有解决任何问题
2.3 添加 nvprof --unified-memory-profiling per-process-device 或 nvprof --unified-memory-profiling off 选项
此方法中的二者是等价的,似乎 per-process-device 的值就是 off,于是这两个选项都并没有解决问题。
2.4 打开 "GPU performance counters." 选项
最终是这个办法奏效了,看名字,应该是 GPU 计数器没有启用之类的问题,导致的 nvprof 没有正确的输出,具体步骤为:
打开 windows 下 NVIDIA 控制面板
打开开发者选项
在管理GPU性能计数器中,改为允许所有用户访问:
最终产生了正确的 profiler 结果:
3. 问题根源
我对 GPU 和硬件不甚了解,但通过名字也猜到七七八八,估计就是在 WSL 中没有权限访问 GPU 的性能计数器(performance counters),导致没办法产生正确的 profiler 结果。
参考:cuda - What does nvprof output: "No kernels were profiled" mean, and how to fix it - Stack Overflow