运行我的应用程序时,第一个 cuda_malloc 需要 40 秒,这是由于 GPU 的初始化。当我在调试模式下构建时,这减少到 5 秒,而当我在 Fermi 设备上运行相同的代码时,它需要的时间远远少于一秒(在我的情况下甚至不值得测量)。
现在有趣的是,如果我为这个特定的架构进行编译,使用标志 sm35 而不是 sm20,它会再次变得更快。由于我现在不应该使用任何新的 sm35 功能,我怎样才能为 sm20 编译而不会有这么大的延迟?我也很好奇是什么导致了这种延迟?机器代码是否即时重新编译为 sm35 代码?
附言。我在 Windows 上运行,但我的一位同事遇到了同样的问题,可能是在 Windows 上。该设备是 Kepler,驱动程序版本 320。