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)
该文档提供了额外的使用可能性
进一步研究后发现,--kernels通过使用也为所有内核提供了内核级信息(不使用和专门指定它们)
nvprof --events <event names> --metrics <metric names> ./<cuda benchmark>
Run Code Online (Sandbox Code Playgroud)
事实上,它给出了以下形式的输出
“设备”、“内核”、“调用”、“事件名称”、“最小值”、“最大值”、“平均值”
如果在基准测试中多次调用内核,您可以看到这些内核运行所需事件的最小值、最大值和平均值。显然,--kernelsCuda 7.5 Profiler 上的选项允许指定每个内核的每次运行。