如何观察可执行文件子节的CUDA事件和指标(例如,仅在内核执行时)?

时间:2015-09-17 17:16:00

标签: cuda profiling nvvp nvprof

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

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

system-profiling on --print-gpu-trace -o (filename)    

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

有没有办法隔离仅针对基准运行的一部分计算的事件,例如在内核执行期间?在上面的命令中,

--events inst_issued1    

只是给出了整个可执行文件的指示。谢谢!

2 个答案:

答案 0 :(得分:9)

您可能需要阅读profiler documentation

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

cudaProfilerStart() 
cudaProfilerStop() 

因此,如果您只想收集特定内核的配置文件信息,您可以这样做:

#include <cuda_profiler_api.h>
...

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

并摘自文档:

  

使用启动和停止功能时,还需要指示性能分析工具在应用程序启动时禁用性能分析。对于nvprof,您可以使用--profile-from-start off标志执行此操作。对于Visual Profiler,您可以使用“设置视图”中的“启动分析的开始执行”复选框。

同样来自nvprof的{​​{1}},您可以使用命令行开关将事件/指标列表限制为单个内核:

 --kernels <kernel name>

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

答案 1 :(得分:0)

在进一步研究之后,事实证明,所有内核也给出了内核级别信息(没有使用--kernels并且具体指定它们)

nvprof --events <event names> --metrics <metric names> ./<cuda benchmark>   

实际上,它提供了表单

的输出

&#34; Device&#34;,&#34; Kernel&#34;,&#34; Invocations&#34;,&#34; Event Name&#34;,&#34; Min&#34;,& #34;最大&#34;&#34;平均&#34;

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