我试图了解为什么我的 CUDA 内核的性能相对较低,我希望通过 NVIDIA 分析器得到一些答案。
我的 CUDA 程序是一个大型应用程序的“简化”版本,它隔离和运行有问题的内核。该程序多次启动内核,以测量其执行时间作为多次启动的平均值。在计时循环之后,发出从设备到主机的内存副本,以确保所有内核调用都已完成。该程序是用 CUDA C++ 编写的。
这就是我构建程序的方式:
main.o: main.cu
nvcc -res-usage -arch=sm_61 -c $<
main: main.o stopwatch.o
g++ -o $@ $^ -lcudart -L/usr/local/cuda-11.0/lib64
此测试是在配备 Intel CPU 和 NVIDIA GeForce GTX 1070 的 PC 上完成的。操作系统是 Ubuntu 20.04,带有来自 NVIDIA 网站的新安装的 CUDA 11 以及驱动程序 450.51.06:
nvidia-smi:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.06 Driver Version: 450.51.06 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 GeForce GTX 1070 On | 00000000:01:00.0 On | N/A |
| 28% 38C P8 8W / 151W | 317MiB / 8111MiB | 3% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
以下命令用于生成分析文件:
sudo /usr/local/cuda-11.0/bin/nvprof -o main.nvvp --profile-from-start off ./main
我也尝试从一开始就进行分析,但它会导致下面的相同问题。
以下命令用于启动可视分析器:
nvvp -vm /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java main.nvvp
视觉分析器引导我完成几个步骤,当涉及到“执行内核分析”时,程序告诉我:
内核边界数据不足。无法收集计算内核的计算、内存和延迟范围所需的数据
我的 GPU 上没有这种详细的分析吗?(可能是因为是玩家卡)