关于GPU的warm up

我在进行测试时发现第一次运行程序的时间比第2,3,4次运行时间要长,我怀疑要么是GPU缓存的问题,即第2,3,4次后数据在GPU上存在缓存,但是我每次运行时都cudaResetDevice了,要么是GPU在启动时存在warm up的情况,记得某次在SDK的例子中好像看到过一次在启动前进行warm up的情况,好像是调用一次简单的kernal,不知道大家有没有遇到类似的情况,有什么建议?

LZ您好:

第一次启动kernel可能伴随环境初始化等一系列操作,所以会比后续运行kenrel的时间长。
您如果需要计时测试,请从第二次开始;以及在常规编程中可以尽可能早地执行一个空的kernel以使GPU尽早热身。

此外,cache可能略有影响,如果您多次运行同一个kernel配合同样的显存中的数据,那么在您第二次开始调用kernel的时候,L2 cache可能已经缓冲好了部分数据,因为这些数据在第一次调用kernel的时候用过。这样一来可能会有少量的性能提升。以及,我尚不清楚cudaDeviceReset()是否会清除L2 cache中缓冲的数据。

大致如此,简而言之,第一这个是GPU的热身,第二这个一般认为和cache关系不大。

祝您编码顺利~