除了第一次cudaMalloc调用之外,还有任何初始化GPU的特殊函数吗?

除了第一次cudaMalloc调用之外,还有任何初始化GPU的特殊函数吗?,cuda,gpu,Cuda,Gpu,由于GPU上的一些初始化工作,第一个Cudamaloc调用很慢(比如0.2秒)。是否有单独进行初始化的函数,以便我可以分离时间?cudaSetDevice似乎可以将时间减少到0.15秒,但仍然不能消除所有的初始化开销 呼叫 cudaFree(0); 是在CUDA运行时强制建立惰性上下文的规范方法。您无法减少开销,这是驱动程序、运行时和操作系统延迟的函数。但是上面的调用将允许您控制这些开销在程序执行期间如何/何时发生 2015年编辑要添加运行时API中上下文初始化的试探法随着时间的推移发生了微妙

由于GPU上的一些初始化工作,第一个Cudamaloc调用很慢(比如0.2秒)。是否有单独进行初始化的函数,以便我可以分离时间?cudaSetDevice似乎可以将时间减少到0.15秒,但仍然不能消除所有的初始化开销

呼叫

cudaFree(0);
是在CUDA运行时强制建立惰性上下文的规范方法。您无法减少开销,这是驱动程序、运行时和操作系统延迟的函数。但是上面的调用将允许您控制这些开销在程序执行期间如何/何时发生


2015年编辑要添加运行时API中上下文初始化的试探法随着时间的推移发生了微妙的变化,因此
cudaSetDevice
现在建立了一个上下文,因此初始化上下文不需要显式地调用
cudaFree()
,您可以使用
cudaSetDevice
。还需要注意的是,在第一次内核启动时仍会产生一些设置时间,而在这之前并非如此。对于内核计时,最好在启动内核之前先包含一个预热调用,这样您就可以花时间来消除这个设置延迟。似乎各种分析工具都内置了足够的粒度来避免这种情况,而无需任何额外的API调用或内核调用

没错!它捕获所有初始化时间!谢谢