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

Pav*_*vel 5 c++ cuda

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

是否有任何其他 CUDA 相关的东西必须在开始时初始化才能正确测量实际算法执行时间?

tal*_*ies 4

CUDA 运行时 API 中惰性上下文初始化的启发式方法已经发生了微妙的变化,因为您链接到的答案是用我知道的两种方式编写的:

  1. cudaSetDevice()现在启动一个上下文,而之前没有(因此需要cudaFree()该答案中讨论的调用)
  2. 运行时 API 用于在上下文初始化时执行的一些与设备代码相关的初始化现在在首次调用内核时完成

我所知道的第二项的唯一解决方案是运行您想要计时一次的 CUDA 内核代码作为“热身”以吸收设置延迟,然后对代码执行计时以进行基准测试。

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