我正在使用ALEA GPU进行GPU编程(C#)。如果我在内核中使用像atomic_add这样的原子操作,我会在内核调试期间在CUDA WarpWatch窗口中找到“无法解析名称”错误。我看到了blockIdx.x,blockDim.x,threadIdx.x和数组的值,但无法解析变量名。内核按预期工作,但在调试期间无法监视变量,因此很难修复任何错误。已安装CUDA 8 Toolkit,我正在使用Visual Studio 2015.
有什么想法吗?
答案 0 :(得分:1)
这种情况正在发生,因为NVIDIA NVVM后端进行了一些优化,无论它是在Debug模式还是Release模式下编译。它为寄存器分配了一些值,目前无法改变它。 CUDA C的行为非常相似。获得结果的唯一方法是将它们写入全局内存以欺骗寄存器分配或将其写入内核中的控制台,就像您所做的那样。截至目前,我不知道任何其他方法。