nsys/nsys-ui 作用是CPU活动和GPU活动的并行可视化,显示两者在时间轴上的具体事件和占用时长。对于kernel 他只能显示到kernel函数这一层,kernel内部是如何的,nsys 无法显示。进入kernel内部,需要使用ncu。在nsys-ui 中,右击 kernel 可以在 ncu 中查看。
nsys stats
nsys stats report1.nsys-rep
** CUDA API Summary (cuda_api_sum):
Time (%) Total Time (ns) Num Calls Avg (ns) Med (ns) Min (ns) Max (ns) StdDev (ns) Name
-------- --------------- --------- ------------ ------------ -------- ---------- ------------ ----------------------
96.5 68,467,392 2 34,233,696.0 34,233,696.0 6,880 68,460,512 48,404,027.4 cudaMalloc
2.0 1,396,032 2 698,016.0 698,016.0 63,264 1,332,768 897,674.9 cudaMemcpy
1.2 865,920 1 865,920.0 865,920.0 865,920 865,920 0.0 cudaLaunchKernel
0.3 198,656 2 99,328.0 99,328.0 16,064 182,592 117,753.1 cudaFree
0.0 2,336 1 2,336.0 2,336.0 2,336 2,336 0.0 cuModuleGetLoadingMode
生成report
nsys export --type text --output report1.txt report1.nsys-rep
输出无法阅读
使用 sqlite
nsys export --type sqlite --output report1.sqlite report1.nsys-rep
sqlite3 report1.sqlite
不直观
使用 ui
nsys-ui report1.nsys-rep 是最佳方案,需要开启 X11 forwarding。但是 OpenGL 有问题:
OpenGL version is too low (1). Falling back to Mesa software rendering. Mesa failed
通过一下命令可以解决:
export QT_QUICK_BACKEND=opengl
export QSGR_RENDERER_TYPE=opengl
nsys-ui report1.nsys-rep
可用。
UI中,可以在时间轴中定位到 kernel ,右键可以在 ncu 中得到 basic 的报告。
进一步:在gui中 查看 GPU 硬件指标如 SM 利用率、Tensor Core 活动、线程束(Warp)效率、显存带宽和 PCIe/NVLink 数据吞吐
nsys profile --trace=cuda -o report_name ./softmax得到report_name.nsys-rep,用 nsys-ui 打开。在 Event Even 标签中查看细节ui 中会有生成指标的命令行。