【发布时间】:2020-12-08 03:36:52
【问题描述】:
我正在尝试了解为什么我的 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 关闭 ./main
我也尝试从一开始就进行分析,但它会导致以下相同的问题。
以下命令用于启动可视分析器:
nvvp -vm /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java main.nvvp
Visual profiler 会引导我完成几个步骤,当涉及到“执行内核分析”时,程序会告诉我:
内核边界数据不足。计算计算所需的数据, 无法收集内核的内存和延迟范围
我的 GPU 上没有这种详细的分析吗? (可能是因为是玩家卡)
【问题讨论】:
-
您可能想尝试添加
--analysis-metrics开关。见here。此外,由于您使用的是--profile-from-start off,我假设您的代码中有一些分析器 API 命令。 -
@RobertCrovella 甜蜜!那解决了它。分析器现在显示内核分析。
-
有人可以添加一个简短的答案来解释未来访问者的解决方案吗?