【问题标题】:"Could not resolve name" while debugging ALEA Kernel with Atomic Operation (atomic_add)使用原子操作 (atomic_add) 调试 ALEA 内核时出现“无法解析名称”
【发布时间】:2017-01-07 11:16:34
【问题描述】:

我正在使用 ALEA GPU 进行 GPU 编程 (C#)。如果我在内核中使用 atomic_add 之类的原子操作,则在内核调试期间,我的变量在 CUDA WarpWatch 窗口中出现“无法解析名称”错误。我看到了 blockIdx.x、blockDim.x、threadIdx.x 和数组的值,但无法解析变量名。内核按预期工作,但在调试期间无法监控变量,因此难以修复任何错误。 CUDA 8 Toolkit 已安装,我正在使用 Visual Studio 2015。

有什么想法吗?

【问题讨论】:

  • 你是否编译了调试代码,即调试项目?
  • 是的。我做了所有写在 ALEAGPU 网站上的事情。该项目在调试模式下工作。我已经可以调试它并逐步通过内核。如果没有任何原子操作,我可以看到变量的值。否则,我会在 Warp Watch 窗口中看到“无法解析名称”错误。我必须将变量值写入控制台(在内核代码中),以便我可以了解正在发生的事情。
  • @RobertCrovella,鉴于我对 ALEA GPU 的理解,我不确定这里是否涉及任何 CUDA 编译。调试信息似乎不是由 CUDA 编译器管理,而是由 ALEA 解决方案管理。

标签: c# cuda aleagpu


【解决方案1】:

发生这种情况是因为 NVIDIA NVVM 后端进行了一些优化,无论它是在调试还是发布模式下编译。它为寄存器分配了一些值,目前没有办法关闭它。 CUDA C 的行为非常相似。获得结果的唯一方法是将它们写入全局内存以欺骗寄存器分配,或者像您所做的那样将它们写入内核中的控制台。到目前为止,我不知道任何其他方法。

【讨论】:

    猜你喜欢
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2014-02-15
    相关资源
    最近更新 更多