CUDA:CPU计时器和CUDA计时器事件之间的区别?

Ash*_*ppa 8 cuda timer

使用CPU计时器CUDA计时器事件来测量执行某些CUDA代码所需的时间有什么区别?CUDA程序员应该使用以下哪些,为什么?

CPU计时器使用将涉及cudaThreadSynchronize在记录任何时间之前调用.注意clock()可以使用时间或者QueryPerformanceCounter可以查询(在Windows上)高分辨率性能计数器.

CUDA计时器事件将涉及使用之前和之后的记录cudaEventRecord.稍后,通过调用cudaEventSynchronize事件cudaEventElapsedTime获得经过的时间,然后获得经过的时间.

tal*_*ies 9

第一部分问题的答案是cudaEvents定时器基于GPU上的高分辨率计数器,与使用主机定时器相比,它们具有更低的延迟和更好的分辨率,因为它们"脱离金属".您应该期望来自cudaEvents定时器的亚微秒分辨率.出于这个原因,你应该更喜欢它们来定时GPU操作.cudaEvents的每个流的特性也可用于检测异步操作,如同步内核执行和重叠复制以及内核执行.使用主机定时器进行这种时间测量几乎是不可能的.

编辑:我不会回答最后一段,因为你删除了它.

  • @Ashwin:在过去3年左右发布的所有兼容CUDA的GPU都支持同时进行主机< - >设备复制和内核执行.但要做到这一点需要cudaMemcpy API的异步版本,并且因为它们与主机是异步的,所以在不强制调用是同步的情况下,您无法检测操作,并且会停止重叠.因此,您可以使用主机计时器测量总重叠的复制执行操作,但无法解决开始和结束时间之间发生的情况.但是将事件插入到流中,您可以. (2认同)