Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cuda 为什么GPU的初始化在开普勒achitecture上花费了很长时间?如何解决这个问题?_Cuda_Initialization_Kepler - Fatal编程技术网

Cuda 为什么GPU的初始化在开普勒achitecture上花费了很长时间?如何解决这个问题?

Cuda 为什么GPU的初始化在开普勒achitecture上花费了很长时间?如何解决这个问题?,cuda,initialization,kepler,Cuda,Initialization,Kepler,运行我的应用程序时,第一个cuda_malloc需要40秒,这是由于GPU的初始化。当我在调试模式下构建时,这将减少到5秒,而当我在费米设备上运行相同的代码时,所需时间远远少于一秒(在我的例子中甚至不值得测量) 现在有趣的是,如果我为这个特定的架构编译,使用标志sm35而不是sm20,它会再次变快。既然我现在还不应该使用sm35的任何新功能,我怎么能为sm20编译,而不会有这么大的延迟呢?我也很好奇是什么导致了这次延误?机器代码是否实时重新编译为sm35代码 另外,我在windows上运行,但我

运行我的应用程序时,第一个cuda_malloc需要40秒,这是由于GPU的初始化。当我在调试模式下构建时,这将减少到5秒,而当我在费米设备上运行相同的代码时,所需时间远远少于一秒(在我的例子中甚至不值得测量)

现在有趣的是,如果我为这个特定的架构编译,使用标志sm35而不是sm20,它会再次变快。既然我现在还不应该使用sm35的任何新功能,我怎么能为sm20编译,而不会有这么大的延迟呢?我也很好奇是什么导致了这次延误?机器代码是否实时重新编译为sm35代码


另外,我在windows上运行,但我的一位同事遇到了同样的问题,可能是在windows上。该设备是开普勒320版驱动程序。

是的,机器代码是动态重新编译的。这称为JIT编译步骤,任何时候机器代码与正在使用的设备不匹配时都会发生(假设可执行文件中存在有效的PTX代码)

您可以了解有关JIT编译的更多信息。请注意关于缓存的讨论,在第一次运行后,缓存应该会缓解这个问题

如果同时为sm_20和sm_35指定编译,则可以构建在这两种类型的设备上快速运行的二进制/可执行文件,并且如果正在使用sm_20不支持的sm_35功能(在编译过程中),也会收到通知