在我的应用程序中,我使用 CUDA 为 CPU 和 GPU 实现了相同的算法,并且我必须测量在 CPU 和 GPU 上执行算法所需的时间。我注意到,在 GPU 版本的算法中,CUDA 初始化花费了一些时间,并按照此处cudaFree(0);建议的 CUDA 初始化添加在程序代码的开头,但第一次 GPU CUDA 算法执行仍然需要更多时间,而不是第一次执行 GPU CUDA 算法。第二个。
是否有任何其他 CUDA 相关的东西必须在开始时初始化才能正确测量实际算法执行时间?
CUDA 运行时 API 中惰性上下文初始化的启发式方法已经发生了微妙的变化,因为您链接到的答案是用我知道的两种方式编写的:
cudaSetDevice()现在启动一个上下文,而之前没有(因此需要cudaFree()该答案中讨论的调用)我所知道的第二项的唯一解决方案是运行您想要计时一次的 CUDA 内核代码作为“热身”以吸收设置延迟,然后对代码执行计时以进行基准测试。
或者,您可以使用驱动程序 API,并对应用程序启动期间何时发生延迟进行更细粒度的控制。
| 归档时间: |
|
| 查看次数: |
3021 次 |
| 最近记录: |