【问题标题】:adding a cuda file to an existing c project in visual studio将 cuda 文件添加到 Visual Studio 中的现有 c 项目
【发布时间】:2013-07-16 20:40:26
【问题描述】:

我正在尝试将 CUDA 文件添加到我现有的 C++ Visual Studio 项目中。我安装了 CUDA 5.0 SDK,创建了一个新的 .cu 文件,并在 CUDA 文件属性中将其项目类型设置为 CUDA/C++。但看起来它只是没有编译给出错误,表明编译器无法识别 CUDA 关键字。我得到的错误之一是:

错误 C2065:“threadIdx”:未声明的标识符

有什么建议吗?

【问题讨论】:

  • 你用的是VS2010吗?您是否按照getting started guide for windows 中的说明进行操作?你能构建任何 cuda 示例程序吗?
  • 投票关闭“不清楚你在问什么”,因为尚未回答澄清问题。

标签: c++ visual-studio-2010 cuda


【解决方案1】:

我发现最好的方法是在现有的 CPU 项目中执行以下操作

1) 构建依赖项 -> 构建自定义

点击 Cuda 复选框

2) 使用向导创建一个新的简单 CUDA 项目(无论如何,您可能希望首先测试您的 CUDA 项目构建是否正常),将两个项目加载到 IDE 中,然后比较两个项目之间的设置,您需要添加 项目设置中的以下内容

$(CudaToolkitLibDir) 到其他库设置(链接器选项卡) $(CudaToolkitIncludeDir) 到其他包含目录(c++ 选项卡)

cudart.lib 到其他依赖项(链接器选项卡)

然后比较 CUDA 选项卡

我发现由于某种原因已经为目标机器架构预先选择了 32 位,所以我将其更改为 64 位。

在此之后,我在预处理器定义中添加了一个定义 _CUDA_CODE_COMPILE_,以在 CUDA 或 CPU 编译之间切换。

#ifdef _CUDA_CODE_COMPILE_
    cudaCodeFunction();
#else
    cpuCodeFunction();
#endif

不理想但有必要,因为似乎没有设置表明已安装 NVCC 的定义(除了执行 shell 命令!)

【讨论】:

  • 您能否详细说明为什么需要_CUDA_CODE_COMPILE_ ?在哪些文件中 - .cpp.cu?你的意思是说对于同一个函数,你同时拥有 CPU 和 CUDA 实现,并且你正在以这种方式在它们之间切换?
  • 我把它放在 .cu 文件中,但你也可以把它放在 cpp 文件中。是的,我正在使用标志进行切换,以防项目构建在没有 CUDA 的机器上
【解决方案2】:

目前我无法全部完成,但我认为这些步骤是必要的:

  1. 在 Project Explorer 构建中右键单击您的项目...(自定义?)[我的版本是德语。我无法准确说出关键字,但它与“构建...”有关。您需要在此处检查“CUDA 5.0”。
  2. 在编译器选项(项目属性)的“常规”选项卡中为 Cuda 设置“附加包含目录”。
  3. 将 cuda libfile 添加到链接器“输入”选项卡中的“附加依赖项”中。
  4. 将文件标记为 Cuda 文件(您已经完成了)。

【讨论】:

  • 我遵循了完全相同的说明。在第 3 步中,您的意思是 cudart.lib 对吗?我仍然遇到同样的错误。我必须提到的一件事是我的 .cu 文件没有主要功能。我正在从 .cpp 文件中调用 .cu 文件中编写的函数。我在 .cu 文件中有设备代码和主机代码,我只从 .cpp 文件调用主机函数。我想这应该没问题吧?
  • 在 VS 2013 中,右键单击项目,然后是 Build Dependencies,然后是 Build Customizations... 然后您会弹出已安装的 Cuda 版本,并选中您想要的版本框。
  • 按照您的建议,我通过在 C/C++ 中添加 ;$(CUDA_PATH)\include; 来修复它 ->常规 ->其他包含目录
【解决方案3】:

您必须为 .cu 文件选择正确的编译器

您是否遵循任何关于如何在 Visual Studio 上设置它的教程?

http://blog.norture.com/2012/10/gpu-parallel-programming-in-vs2012-with-nvidia-cuda/

【讨论】:

  • 当我们将类型更改为CUDA/C++时,VS不会切换到NVCC吗?我尝试创建一个新的 CUDA 项目并使项目属性匹配。我还添加了新 CUDA 项目中使用的相同头文件。没有帮助。
【解决方案4】:

This video 可能会有所帮助。

此视频来自 CoffeeBeforeArch YouTube 频道。
他经历了每一步:

  1. 创建一个空的 C 项目。
  2. 更改构建依赖项。
  3. 在解决方案属性的链接器部分添加某些库。

【讨论】:

    猜你喜欢
    • 2014-06-20
    • 1970-01-01
    • 2020-12-22
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 2011-12-24
    • 1970-01-01
    相关资源
    最近更新 更多