我有一个C ++ Cuda工具包v9.2应用程序可以很好地使用-O
构建,但如果我使用-g -G
构建,我在运行时得到一个cuda错误7:
要求启动的资源过多
我理解from here这意味着:
超出了多处理器上可用的寄存器数量。减少每个块的线程数以解决问题。
因为它可以优化,所以我宁愿不减少每个块的线程数。我可以做些什么,对于调试版本,我使用更少的寄存器,更符合优化?如何在我的应用程序中找到额外寄存器的使用位置?
正如上面的评论中所提到的,由于各种原因,调试版本通常需要更多资源。
您可以使用--maxrregcount
选项或__launch_bounds__
qualifier来设置允许编译器使用的寄存器数量的限制。请注意,转动此旋钮实际上只意味着将一种资源交换给另一种资源。强制编译器使用更少的寄存器通常意味着它必须溢出更多。更多泄漏通常意味着增加本地内存需求。在极端情况下,你可能会遇到另一个限制......