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

tra*_*nes 4 profiling cuda nvvp nvprof

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

nvprof --system-profiling on --print-gpu-trace -o (file name) --events inst_issued1 ./benchmarkname
Run Code Online (Sandbox Code Playgroud)

system-profiling on --print-gpu-trace -o (filename)    
Run Code Online (Sandbox Code Playgroud)

command给出了开始时间,内核结束时间,功率,temp的时间戳,并将信息保存为nvvp文件,以便我们可以在visual profiler中查看它.这允许我们查看代码的任何部分中发生的情况,特别是在特定内核运行时.我的问题是 -

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

--events inst_issued1    
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*lla 11

您可能需要阅读探查器文档.

您可以在可执行文件中打开和关闭分析.这个cuda运行时API是:

cudaProfilerStart() 
cudaProfilerStop() 
Run Code Online (Sandbox Code Playgroud)

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

#include <cuda_profiler_api.h>
...

cudaProfilerStart();
myKernel<<<...>>>(...);
cudaProfilerStop();
Run Code Online (Sandbox Code Playgroud)

并摘自文件:

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

另外,从具体的文档nvprof,您可以使用命令行开关将事件/度量标准列表限制为单个内核:

 --kernels <kernel name>
Run Code Online (Sandbox Code Playgroud)

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


tra*_*nes 0

进一步研究后发现,--kernels通过使用也为所有内核提供了内核级信息(不使用和专门指定它们)

nvprof --events <event names> --metrics <metric names> ./<cuda benchmark>   
Run Code Online (Sandbox Code Playgroud)

事实上,它给出了以下形式的输出

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

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