【问题标题】:Why does -g -G result in Cuda error 7: too many resources requested for launch?为什么 -g -G 会导致 Cuda 错误 7:启动时请求的资源过多?
【发布时间】:2019-04-05 20:25:53
【问题描述】:

我有一个使用 -O 构建的 C++ Cuda 工具包 v9.2 应用程序,但如果我使用 -g -G 构建,我会在运行时收到 cuda 错误 7:

启动时请求的资源过多

我理解from here 这意味着:

已超出多处理器上可用的寄存器数量。减少每个块的线程数来解决问题。

我宁愿不减少每个块的线程数,因为它可以优化。我可以做些什么来让调试版本使用更少的寄存器,更符合优化?如何在我的应用程序中追踪额外寄存器使用的来源?

【问题讨论】:

  • 调试版本可能需要比发布版本更多的寄存器。除了减小块大小之外没有其他解决方法
  • 我有理由确信,调试版本也可能需要比默认可用更多的(线程)本地存储,因此您可能需要考虑增加配置的本地内存量。如果资源是寄存器(可能),@talonmies 的评论适用。

标签: cuda cpu-registers


【解决方案1】:

正如上面的 cmets 中也提到的,由于各种原因,调试构建通常需要更多资源。

您可以使用--maxrregcount 选项或__launch_bounds__ qualifier 设置允许编译器使用多少寄存器的限制。请注意,转动这个旋钮实际上只是意味着用一种资源换另一种资源。强制编译器使用更少的寄存器通常意味着它必须溢出更多。更多的溢出通常意味着增加的本地内存需求。在极端情况下,您可能会遇到另一个限制……

【讨论】:

  • 这不仅仅是因为“缺乏优化”而死——优化(在性能方面)代码可以使用比未优化代码更多的寄存器。调试器构建通常需要将一些银行从本地内存溢出到寄存器,以便可以访问它们
  • @talonmies 你当然是对的,我删除了那个位。
猜你喜欢
  • 2014-11-18
  • 2015-08-05
  • 2018-10-24
  • 2014-04-06
  • 1970-01-01
  • 2019-06-30
  • 2019-10-08
  • 1970-01-01
相关资源
最近更新 更多