CUDA定时器 - CPU与GPU?

时间:2013-12-21 22:58:04

标签: cuda

我正在尝试理解使用CUDA定时器(事件)计时内核执行与常规CPU计时方法(Linux上的gettimeofday等)之间的区别。)

从阅读http://docs.nvidia.com/cuda/cuda-c-best-practices-guide/第8.1节开始,在我看来,唯一真正的区别在于,当使用CPU定时器时,需要记住同步GPU,因为调用是异步的。据推测,CUDA事件API可以为您完成此任务。

这真的是一个问题:

  1. 使用GPU事件,您无需明确调用cudaDeviceSynchronize
  2. 使用GPU事件,您可以获得固有的独立于平台的计时API,而使用CPU则需要为每个操作系统使用单独的API
  3. 提前致谢

1 个答案:

答案 0 :(得分:2)

你已经失败了。因为GPU从CPU异步操作,所以当你启动GPU内核时,CPU可以继续它的快乐方式。在计时时,这意味着您可以在GPU从其内核返回之前到达您的计时代码的末尾(即记录持续时间)。这就是为什么我们要同步..以确保在我们继续使用CPU代码之前内核已经完成。当我们需要来自GPU内核的结果用于后续操作(即算法中的步骤)时,这尤其重要。

如果有帮助,您可以将cudaEventSynchronize视为来自CPU-GPU的同步点,因为CPU计时器依赖于CPU和GPU代码,而cuda计时器事件仅取决于GPU代码。因为那些cuda时序事件是由nvcc专门为CUDA平台编译的,所以它们独立于CPU平台,但依赖于GPU平台。