首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CUDA: CPU计时器和CUDA计时器事件的区别?

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

Stack Overflow用户
提问于 2011-04-29 06:44:27
回答 2查看 4.4K关注 0票数 8

使用CPU计时器CUDA计时器事件来测量执行某些CUDA代码所需的时间有什么区别?

一个CUDA程序员应该使用哪一个?

为什么?

我所知道的

CPU计时器的使用将涉及在任何时间之前调用cudaThreadSynchronize。为了说明时间,可以使用其中之一:

  1. clock()
  2. high-resolution性能计数器,如QueryPerformanceCounter (在Windows上)、

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

EN

回答 2

Stack Overflow用户

发布于 2011-04-29 07:05:09

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

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

票数 9
EN

Stack Overflow用户

发布于 2011-05-01 03:59:31

使用CUDA事件来计时的主要优点是,由于其他系统事件(如分页或来自磁盘或网络控制器的中断),它们不受扰动的影响。另外,由于cu(da)EventRecord是异步的,所以在定时短、GPU密集的操作中,海森堡效应较小。

CUDA事件的另一个优点是它们具有清晰的跨平台API --不需要包装gettimeofday()或QueryPerformanceCounter()。

最后一个注意事项:在使用流CUDA事件进行计时时要小心--如果您不指定空流,则可能会结束您无意中的计时操作。在CUDA事件和读取CPU的时间戳计数器(这是一个序列化指令)之间有一个很好的类比。在现代超标量处理器上,串行化语义使得时序变得清晰。同样,与RDTSC一样,您应该始终用足够的工作来安排您想要计时的事件,从而使时间是有意义的(就像您不能使用RDTSC对单个机器指令进行有意义的计时一样)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5828816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档