我正在使用 CUDA 7.0 分析器nvprof
来分析一些进行 CUDA 调用的过程:
$ nvprof -o out.nvprof /path/to/my/app
后来,我生成了两个跟踪:“API 跟踪”(主机 CPU 上发生的情况,例如 CUDA 运行时调用和您标记的范围)和“GPU 跟踪”(内核执行、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
每个跟踪中的每条记录都有一个时间戳(或开始和结束时间)。问题是,这两个 trace 中的时间值 0 并不相同:GPU trace time-0 点似乎表示相关进程触发的 GPU 上的第一个操作开始执行的时间,而 API trace 的 time-0 点似乎是流程执行的开始,或者某个时候。
我还注意到,当我使用nvvp
和导入时out.nvprof
时,值被更正了,也就是说,第一个 GPU 操作的开始时间不是 0,而是更现实的东西。
如何获得两条迹线之间的正确偏移量?