如何观察可执行文件部分的CUDA事件和度量(例如,仅在内核执行期间)?

如何观察可执行文件部分的CUDA事件和度量(例如,仅在内核执行期间)?,cuda,profiling,nvvp,nvprof,Cuda,Profiling,Nvvp,Nvprof,我熟悉使用nvprof访问基准的事件和指标,例如 nvprof --system-profiling on --print-gpu-trace -o (file name) --events inst_issued1 ./benchmarkname 命令为开始时间、内核结束时间、电源、温度提供时间戳,并将信息保存到nvvp文件中,以便我们可以在可视化探查器中查看它。这使我们能够看到代码的任何部分发生了什么,特别是在特定内核运行时。我的问题是: 是否有一种方法可以隔离仅在基准测试运行的一部分中

我熟悉使用nvprof访问基准的事件和指标,例如

nvprof --system-profiling on --print-gpu-trace -o (file name) --events inst_issued1 ./benchmarkname

命令为开始时间、内核结束时间、电源、温度提供时间戳,并将信息保存到nvvp文件中,以便我们可以在可视化探查器中查看它。这使我们能够看到代码的任何部分发生了什么,特别是在特定内核运行时。我的问题是:

是否有一种方法可以隔离仅在基准测试运行的一部分中计数的事件,例如在内核执行期间?在上面的命令中

--events inst_issued1    
只给出整个可执行文件的指令。谢谢

您可能需要阅读

您可以在可执行文件中打开和关闭评测。用于此目的的cuda运行时API是:

cudaProfilerStart() 
cudaProfilerStop() 
因此,如果只想收集特定内核的配置文件信息,可以执行以下操作:

#include <cuda_profiler_api.h>
...

cudaProfilerStart();
myKernel<<<...>>>(...);
cudaProfilerStop();

该文档提供了额外的使用可能性。

在进一步研究之后,发现还提供了使用-kernels并通过使用指定它们的所有内核的内核级信息

nvprof --events <event names> --metrics <metric names> ./<cuda benchmark>   
事实上,它给出了表单的输出

设备、内核、调用、事件名称、最小值、最大值、平均值


如果在基准测试中多次调用内核,这将允许您查看这些内核运行所需事件的最小值、最大值和平均值。显然,Cuda 7.5 Profiler上的-kernels选项允许指定每个内核的每次运行

应该说这个命令给出了内核的时间戳*开始时间,内核结束时间,…您可以编辑自己的问题,而不是像这样发表评论。谢谢@Robert Crovella!另外,我一直在研究这个问题,注意到您可以获得每个内核w/o调用的内核级信息-内核我将给出另一个答案。您能给我指出费米体系结构的度量和事件列表吗?从我见过的每一个NVIDIA GPU评测问题来看,你是第一个回答的人!您可以通过运行nvprof-query metrics从硬件本身获得这一点,也许您应该阅读??您还可以执行nvprof-query事件,我是否应该提到探查器有命令行帮助nvprof-help?无论如何,在探查器文档的末尾,有一个按计算体系结构细分的指标列表。费米是cc2.0。看,我不知道发布的事件列表可能在某个地方,我只是不知道它在哪里,所以我在费米设备上运行了这个命令,并为你发布了它。祝你一切顺利!非常感谢。
 --kernels <kernel name>
nvprof --events <event names> --metrics <metric names> ./<cuda benchmark>