我熟悉使用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
只是给出了整个可执行文件的指示。谢谢!
答案 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
选项允许指定每个内核的每次运行。