【问题标题】:Why is the initialization of the GPU taking very long on Kepler achitecture and how to fix this?为什么在 Kepler 架构上初始化 GPU 需要很长时间,如何解决这个问题?
【发布时间】:2013-10-18 23:34:31
【问题描述】:

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

现在有趣的是,如果我为这个特定的架构进行编译,使用标志 sm35 而不是 sm20,它会再次变得更快。由于我现在不应该使用任何新的 sm35 功能,我怎样才能为 sm20 编译而不会有这么大的延迟?我也很好奇是什么导致了这种延迟?机器代码是否被即时重新编译成 sm35 代码?

附言。我在 Windows 上运行,但我的一位同事遇到了同样的问题,可能是在 Windows 上。该设备是 Kepler,驱动程序版本 320。

【问题讨论】:

    标签: cuda initialization kepler


    【解决方案1】:

    是的,机器代码是即时重新编译的。这称为 JIT 编译步骤,只要机器代码与正在使用的设备不匹配(假设可执行文件中存在有效的 PTX 代码),就会发生这种情况。

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

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

    【讨论】:

      猜你喜欢
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多