NVIDIA Visual Profiler:内核边界数据不足
NVIDIA Visual Profiler: Insufficient kernel bounds data
我试图了解为什么我的 CUDA 内核性能相对较低,我希望通过 NVIDIA 分析器得到一些答案。
我的 CUDA 程序是一个更大的应用程序的 'boiled down' 版本,隔离并运行有问题的内核。该程序多次启动内核,以测量其执行时间作为多次启动的平均值。在定时循环之后,从设备到主机的内存副本被发出以确保所有内核调用都已完成。该程序是用 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 上完成的。OS 是 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
Visual 探查器引导我完成几个步骤,当谈到“执行内核分析”时,程序告诉我:
Insufficient kernel bounds data. The data needed to calculate compute,
memory, and latency bounds for the kernel could not be collected
我的 GPU 上没有这种详细的分析吗? (可能因为是玩家卡)
默认情况下,nvprof
将仅捕获其生成的输出文件中的少量信息。当输出文件导入 nvvp
时,这足以生成应用程序时间线,但没有足够的信息来启用 nvvp
.
的所有不同功能
根据 documentation,建议将 nvprof
的 --analysis-metrics
开关用于此类用途。
--analysis-metrics
在探查器文档中被提及了大约 6 次不同的时间,因此您可能只想搜索它以查看所有参考或使用建议。
请注意,--analysis-metrics
可以捕获大量信息。对于大型、复杂的应用程序,它可能会大大增加分析器处理数据所花费的时间。因此,如果您明确知道要查找哪些数据,则可能希望改为指定特定指标。但是,如果没有 --analysis-metrics
,导入文件时各种 nvvp
分析工具可能无法正常工作。
我试图了解为什么我的 CUDA 内核性能相对较低,我希望通过 NVIDIA 分析器得到一些答案。
我的 CUDA 程序是一个更大的应用程序的 'boiled down' 版本,隔离并运行有问题的内核。该程序多次启动内核,以测量其执行时间作为多次启动的平均值。在定时循环之后,从设备到主机的内存副本被发出以确保所有内核调用都已完成。该程序是用 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 上完成的。OS 是 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
Visual 探查器引导我完成几个步骤,当谈到“执行内核分析”时,程序告诉我:
Insufficient kernel bounds data. The data needed to calculate compute, memory, and latency bounds for the kernel could not be collected
我的 GPU 上没有这种详细的分析吗? (可能因为是玩家卡)
nvprof
将仅捕获其生成的输出文件中的少量信息。当输出文件导入 nvvp
时,这足以生成应用程序时间线,但没有足够的信息来启用 nvvp
.
根据 documentation,建议将 nvprof
的 --analysis-metrics
开关用于此类用途。
--analysis-metrics
在探查器文档中被提及了大约 6 次不同的时间,因此您可能只想搜索它以查看所有参考或使用建议。
请注意,--analysis-metrics
可以捕获大量信息。对于大型、复杂的应用程序,它可能会大大增加分析器处理数据所花费的时间。因此,如果您明确知道要查找哪些数据,则可能希望改为指定特定指标。但是,如果没有 --analysis-metrics
,导入文件时各种 nvvp
分析工具可能无法正常工作。