【问题标题】:Could not resolve name when debug CUDA kernel [closed]调试CUDA内核时无法解析名称[关闭]
【发布时间】:2014-03-21 14:06:49
【问题描述】:

我在调试 CUDA 内核时遇到问题。某些变量无法在调试器中评估。经过大量调查和简化项目和代码后,我有一个非常简单的项目,其中包含对 DLL 中主机函数的主应用程序调用,其中调用内核。 使用 Visual Studio 的项目向导实际创建的内核代码。 另外我有 EMPTY .cu 文件。当它包含在构建中时,我​​遇到了问题。 当此文件从构建中排除时 - 一切正常。 空文件的dll调试版本大小为92kb,不带90kb。

我的设置是 视窗 7 专业版 x64 VS2010 专业版 NVIDIA Nsight VS 版本 3.2.2 CUDA SDK 5.5 英伟达驱动331.82

【问题讨论】:

  • 您的问题是什么?我只看到你的问题列表?还请提供更多信息,例如您的简单项目。
  • 我的问题是调试代码。如果不调试代码和评估变量,我就无法转发我的项目。我可以分享完整的解决方案(5kb zip 中的 12 个文件)。链接到 Google Drive 没问题?
  • 不要在您的问题中添加外部链接。当这些链接失效时,这个问题对未来的读者来说就变得毫无用处了。相反,将您的问题提炼成可以在问题中完全发布的简短内容。很可能在做这个缩减的过程中,你可能会自己发现问题或关键问题。
  • 我从解决方案开始,包括 5 个项目和大约 400 个文件。空文件最初也包含代码。我将有问题的项目与由向导创建的项目按原样进行比较,但没有发现差异。我不明白空源文件如何将二进制文件增加 2K 并破坏调试信息。
  • 这个问题对于使用过 CUDA 并花一分钟阅读(勇敢的努力但挣扎:) 非母语人士的英语的人来说是非常清楚的。不要轻率地结束问题。

标签: visual-studio-2010 cuda


【解决方案1】:

最后我找到了问题的根源和解决方法。 当解决方案很复杂并且包含多个 cpp 和 cu 文件时,就会出现问题。 因为这需要“可重定位设备代码”。否则不能将GPU代码分割成几个CU文件。

CU file passed for compilation to NVCC that perform preprocessing and divide code to host and gpu. After that host code compiled with VC compiler and gpu continue with nvcc.

当 CU 文件不包含任何 GPU 代码(即 __device__ 函数)时,调试信息将被破坏。 所以解决方法是在此类 CU 文件中添加虚拟函数:

__device__ void dummy1()
{
}

【讨论】:

  • 这对我也有用。
  • 尽管这个问题有点尴尬,但我在使用 rdc 标志编译时使用 nSight 调试 CUDA 遇到了同样的困难,我通过将所有编译文件合并到一个文件中并排除 rdc 解决了这个问题标志。
【解决方案2】:

尽管这个问题被否决了,但我也遇到了同样的问题,经过一番调查后发现,当我将“配置属性 | CUDA C/C++ | 通用 | 生成可重定位设备代码”设置为“是”,这对我来说是非常关键的设置。将其设置为“否”解决了这个问题,但我不知道为什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2011-10-07
    • 2021-04-08
    • 1970-01-01
    • 2022-07-07
    • 2018-01-31
    • 2019-05-10
    相关资源
    最近更新 更多