如何初始化CUDA以便我可以进行有效的执行时间测量?

时间:2015-05-25 12:09:56

标签: c++ cuda

在我的应用程序中,我使用CUDA为CPU和GPU实现了相同的算法,我必须测量在CPU和GPU上执行算法所需的时间。我注意到在GPU版本的算法中花了一些时间进行CUDA初始化,并在程序代码的开头添加cudaFree(0);,因为它建议here用于CUDA初始化,但是第一个GPU CUDA算法执行仍然需要比第二个更多的时间。

是否还有其他一些必须在开始时初始化的CUDA相关内容才能正确测量实际算法执行时间?

1 个答案:

答案 0 :(得分:3)

CUDA运行时API中延迟上下文初始化的启发式略有改变,因为您链接的答案是以我所知的两种方式编写的:

  1. cudaSetDevice()现在启动一个上下文,而早期的上下文没有(因此需要在该答案中讨论cudaFree()调用)
  2. 运行时API用于在上下文初始化时执行的一些与设备代码相关的初始化现在在首次调用内核时完成
  3. 我知道的第二个项目的唯一解决方案是运行您想要计时的CUDA内核代码作为“预热”以吸收设置延迟,然后然后执行您的计时关于用于基准测试目的的代码。

    或者,您可以使用驱动程序API,并对应用程序启动期间何时发生延迟进行更细粒度的控制。