我正试图了解为什么我的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
此测试是在配备英特尔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--从开始的配置文件关闭/主
我也从一开始就尝试过分析,但它导致了下面相同的问题。
以下命令用于启动可视化探查器:
nvvp-vm/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java main.nvvp
Visual探查器引导我完成几个步骤;执行内核分析";程序告诉我:
内核边界数据不足。计算所需的数据,无法收集内核的内存和延迟界限
这种详细的评测在我的GPU上不可用吗?(可能是因为这是一张玩家卡(
nvprof
只会在其生成的输出文件中捕获少量信息。当输出文件导入nvvp
时,这足以生成应用程序时间线,但不足以启用nvvp
的所有不同功能。
根据文档,建议将nvprof
的--analysis-metrics
开关用于此类用途。
在探查器文档中,--analysis-metrics
被引用了大约6次,所以您可能只想在它上搜索,以查看所有关于它的引用或建议。
注意,--analysis-metrics
可以捕获大量的信息。对于大型、复杂的应用程序,它可能会大大增加分析程序处理数据的时间。因此,如果您明确知道要查找的数据,您可能希望指定特定的指标。但是,如果没有--analysis-metrics
,导入文件时,各种nvvp
分析工具可能无法正常工作。