【问题标题】:Cuda: error C2065:"threadIdx':undeclared identifierCuda:错误 C2065:“threadIdx”:未声明的标识符
【发布时间】:2012-06-09 19:09:28
【问题描述】:

我正在尝试在 VisualStudio 2010 中创建一个 Cuda 项目。我创建了一个简单的测试 .cu 文件,该文件接受一个数组并将其所有元素加 1 并将结果发送回主机。

我已将 cudart.lib 文件添加到链接器。

在 .cu 代码中,我包含了 #include cuda_runtime.h 标头。

但是当我试图编译它时,它给出了两个错误。

错误 C2065:'threadIdx':未声明的标识符
错误 C2059:语法错误:'

在安装Nvidia Nsight Visual Studio 版本并将.cu 文件的项目类型设置为CUDA C/C++ 后,它开始给出两个额外的错误:

错误 D8003:缺少源文件名

错误 MSB3721:命令 ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" - -use-local-env --cl-version 2010 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin" -I"C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.2\ C\common\inc" -I"C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.2\shared\inc" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\include" - G --keep-dir "Debug" -maxrregcount=0 --machine 32 --compile -g -Xcompiler "/EHsc /nologo /Od /Zi /MDd " -o "Debug\test.cu.obj" "\ucigrad .local\Users\AGill\My Documents\Visual Studio 2010\Projects\cudatest\cudatest\test.cu"" 退出,代码为 2。

请帮助我如何解决它。我认为VS2010中的nvcc编译器可能存在一些问题,但我无法弄清楚。

【问题讨论】:

  • 我也在使用 CUDA 4.2。我通过右键单击项目在 Build Customization 选项中选择了 Cuda 4.2。
  • 您是否链接了相应的库?
  • 是的,我包含了 cudart.lib。此外,当我将 .cu 文件的项目类型设置为 CUDA C/C++ 时,它会给出两个额外的错误:D8003:缺少源文件名和错误 MSB3721。跨度>
  • 你说,#include cuda_runtime.h 但你的真实代码在cuda_runtime.h 周围有引号,对吧? :)
  • 在线搜索“error D8003:missing source filename”表明触发它的一件事是不匹配的引号,例如在预处理器定义周围。你能给我们cl的命令行吗? Property Pages | C/C++ | Command Line.

标签: visual-studio-2010 cuda


【解决方案1】:

如果您像我一样对 IDE 错误(仍然可以让您的代码正常工作)感到恼火,请尝试在 SDK 的包含文件夹中进行纯文本搜索以查找(看似)未定义的符号,您会发现立即包含正确的标题。 例如,“threadIdx”驻留在“device_launch_parameters.h”头文件中。

【讨论】:

    【解决方案2】:

    您收到的错误很可能表明您没有使用 NVCC 编译 CUDA 源代码。如果您在安装工具包时安装了 Visual Studio 集成,请通过选择适当的项目类型 (CUDA C/C++) 来确保您是。或者确保您已经为您的源设置了适当的构建规则。

    【讨论】:

    • 我已经安装了 Nvidia Nsight 并将 .cu 文件的项目类型设置为 CUDA C/C++。但是这样做会开始给出两个额外的错误,错误:D8003:缺少源文件名和错误: MSB3721(带有大描述以及上述两个错误。
    • 好的,这是下一步。但是你问的问题然后就解决了。您现在得到的错误究竟是什么(它们的完整描述)?也许将其添加到您的问题中。或者,如果它过于混淆这个问题,也许可以将其作为一个单独的问题。毕竟它们似乎是不同的问题。
    • 我已经用两个额外的错误编辑了这个问题。还没有解决以前的错误。另一件事,我尝试了由 cuda 提供的示例源代码(ScalarProd)之一,它运行良好,但是当我尝试从头开始创建项目,出现了这些问题。
    • 所以你仍然有相同的前两个错误抱怨 threadIdx?
    • 我还包含 3 个目录到链接器。 1)C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.2\C\common\lib 2)C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.2\shared\lib 3)C:\Program Files\NVIDIA GPU计算工具包\CUDA\v4.2\lib
    【解决方案3】:
    1. 有 2 种类型的错误 - 构建错误和 IDE 错误。检查构建是否成功(可以忽略IDE错误)

    2. 尝试#include "cuda.h"(或使用尖括号)

    3. 重建有时可以解决问题

    【讨论】:

      【解决方案4】:

      对于即使按照上述步骤也有问题的人,对我有用的解决方案是在 .cu 文件的属性下将“ItemType”更改为“CUDA C/C++”。

      【讨论】:

        猜你喜欢
        • 2011-02-15
        • 2011-04-16
        • 2011-04-16
        • 2010-12-24
        • 2023-03-04
        • 2011-03-02
        • 2011-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多