在我的应用程序中,我使用CUDA为CPU和GPU实现了相同的算法,我必须测量在CPU和GPU上执行算法所需的时间。我注意到在GPU版本的算法中花了一些时间进行CUDA初始化,并在程序代码的开头添加cudaFree(0);
,因为它建议here用于CUDA初始化,但是第一个GPU CUDA算法执行仍然需要比第二个更多的时间。
是否还有其他一些必须在开始时初始化的CUDA相关内容才能正确测量实际算法执行时间?
答案 0 :(得分:3)
CUDA运行时API中延迟上下文初始化的启发式略有改变,因为您链接的答案是以我所知的两种方式编写的:
cudaSetDevice()
现在启动一个上下文,而早期的上下文没有(因此需要在该答案中讨论cudaFree()
调用)我知道的第二个项目的唯一解决方案是运行您想要计时的CUDA内核代码作为“预热”以吸收设置延迟,然后然后执行您的计时关于用于基准测试目的的代码。
或者,您可以使用驱动程序API,并对应用程序启动期间何时发生延迟进行更细粒度的控制。