我的CUDA nvprof' API Trace'和GPU跟踪'不同步 - 怎么办?

时间:2015-04-09 20:35:03

标签: cuda profiling trace data-synchronization nvprof

我使用CUDA 7.0探查器nvprof来分析制作CUDA调用的一些过程:

$ nvprof -o out.nvprof /path/to/my/app

稍后,我会生成两条跟踪:' API跟踪' (在主机CPU上发生的事情,例如CUDA运行时调用和您标记的范围)和“GPU跟踪”#39; (内核执行,memset,H2D,D2H等):

$ nvprof -i out.nvprof --print-api-trace --csv 2>&1 | tail -n +2 > api-trace.csv
$ nvprof -i out.nvprof --print-gpu-trace --csv 2>&1 | tail -n +2 > gpu-trace.csv

每条跟踪中的每条记录都有一个时间戳(或开始和结束时间)。问题是,这两条轨迹中的时间值0不相同:GPU跟踪时间0点似乎表示相关进程触发的GPU上的第一个操作何时开始执行,而API跟踪则是时间0点似乎是流程执行的开始,或者某个时候。

我还注意到,当我使用nvvp并导入out.nvprof时,值会被更正,也就是说,第一个GPU op的开始时间不是0,但是一些更现实的东西。

如何在两条迹线之间获得正确的偏移?

1 个答案:

答案 0 :(得分:3)

the nvprof documentation可能不是很明显,但是在请求--print-gpu-trace的输出时,可以同时指定--print-api-tracenvprof,无论您是在分析应用还是从先前捕获的探查器输出文件中提取信息。

如果您要分析应用程序,以下内容应为API活动和GPU活动生成“协调”时间轴:

nvprof --print-gpu-trace --print-api-trace ./my_app

您可以使用--log-file option保存输出。

同样,如果要从先前捕获的输出文件中提取输出(与日志文件不同),您可以执行以下操作:

nvprof -i profiler_out_file --print-gpu-trace --print-api-trace ...

其中profiler_out_file应该是您之前使用the nvprof -o ... option保存的文件的名称。

使用相同的命令打印两条迹线对于两个(组合)时间轴在同一时间点开始是必不可少的;如果您发出两个命令,每个命令都打印另一个跟踪,它们可能不会“协调”。