由于 GPU 上的一些初始化工作,第一个 cudaMalloc 调用很慢(例如 0.2 秒)。是否有任何函数只进行初始化,以便我可以分离时间? cudaSetDevice 似乎将时间减少到 0.15 秒,但仍然没有消除所有初始化开销。
致电
cudaFree(0);
是在 CUDA 运行时强制建立惰性上下文的规范方法。您无法减少开销,这是驱动程序、运行时和操作系统延迟的函数。但是上面的调用可以让您控制程序执行期间这些开销如何/何时发生。
2015年编辑补充一下,运行时 API 中上下文初始化的启发式方法随着时间的推移发生了微妙的变化,因此cudaSetDevice
现在建立了一个上下文,所以cudaFree()
初始化上下文时没有明确要求调用,您可以使用cudaSetDevice
反而。另请注意,首次内核启动时仍会产生一些设置时间,而在此之前情况并非如此。对于内核计时,最好在启动内核之前首先包含一个预热调用,您将有时间消除此设置延迟。看来各种分析工具内置了足够的粒度来避免这种情况,而无需任何额外的 API 调用或内核调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)