除第一次cudaMalloc调用之外,初始化GPU的任何特定功能?

时间:2013-03-01 20:59:36

标签: cuda gpu

由于GPU上的一些初始化工作,第一个cudaMalloc调用很慢(如0.2秒)。是否有任何单独进行初始化的功能,以便我可以分开时间? cudaSetDevice似乎将时间缩短到0.15秒,但仍然没有消除所有init开销。

1 个答案:

答案 0 :(得分:25)

致电

cudaFree(0);

是在CUDA运行时强制延迟上下文建立的规范方法。您无法减少开销,这是驱动程序,运行时和操作系统延迟的函数。但是上面的调用可以让你控制程序执行期间这些开销的发生方式/时间。

2015年编辑,补充说,运行时API中的上下文初始化的启发式随着时间的推移发生了微妙的变化,因此cudaSetDevice现在建立了一个上下文,因此cudaFree()调用没有明确要求初始化上下文,您可以使用cudaSetDevice代替。另请注意,在第一次内核启动时仍会产生一些设置时间,而在此之前并非如此。对于内核计时,最好在启动内核之前首先包括预热调用,您将有时间消除此设置延迟。看起来各种分析工具都具有足够的粒度,以避免在没有任何额外的API调用或内核调用的情况下进行此操作。