C++ 如何在VisualStudio2008中启动新的CUDA项目?

C++ 如何在VisualStudio2008中启动新的CUDA项目?,c++,visual-studio,cuda,C++,Visual Studio,Cuda,这是一个非常基本的问题,但是我如何在VisualStudio2008中启动一个新的CUDA项目呢?我已经找到了大量关于CUDA相关事宜的文档,但对于如何启动一个新项目却一无所知。我正在使用Windows 7 X64 Visual Studio 2008 C++。我真的很想找到一些非常基本的Hello World应用程序来编译和运行一个基本的程序 编辑: 我试过你的脚步,汤姆。我安装了一个控制台应用程序。然后,我删除了默认的.cpp文件,并从模板项目中复制了三个文件,以便进行编译。当我编译时,te

这是一个非常基本的问题,但是我如何在VisualStudio2008中启动一个新的CUDA项目呢?我已经找到了大量关于CUDA相关事宜的文档,但对于如何启动一个新项目却一无所知。我正在使用Windows 7 X64 Visual Studio 2008 C++。我真的很想找到一些非常基本的Hello World应用程序来编译和运行一个基本的程序

编辑:

我试过你的脚步,汤姆。我安装了一个控制台应用程序。然后,我删除了默认的.cpp文件,并从模板项目中复制了三个文件,以便进行编译。当我编译时,template_gold.cpp抱怨没有包含stdafx.h,所以我就包含了它。现在,生成失败,原因如下:

1>------ Build started: Project: CUDASandbox, Configuration: Debug x64 ------ 1>Compiling... 1>template_gold.cpp 1>Linking... 1>LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup 1>D:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\x64\Debug\CUDASandbox.exe : fatal error LNK1120: 1 unresolved externals 1>Build log was saved at "file://d:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\CUDASandbox\x64\Debug\BuildLog.htm" 1>CUDASandbox - 2 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 1> ----构建已启动:项目:CUDASandbox,配置:调试x64------ 1> 编译。。。 1> 模板_gold.cpp 1> 链接。。。 1> LIBCMT.lib(crt0.obj):错误LNK2019:函数\uu tmaincrstartup中引用的未解析外部符号main 1> D:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\x64\Debug\CUDASandbox.exe:致命错误LNK1120:1未解析的外部 1> 生成日志保存在“文件://d:\Stuff\Programming\visualstudio 2008\Projects\CUDASandbox\CUDASandbox\x64\Debug\BuildLog.htm”中 1> CUDASandbox-2个错误,0个警告 ======生成:0成功,1失败,0最新,0跳过==========
  • 安装CUDA VS向导。它将设置VS并将CUDA项目添加到“新建项目”菜单中。
  • 确保已安装x64编译器(必须在VS安装期间进行检查)。
  • 检查搜索路径中是否有x64 libs、includes、nvcc dir和
  • 使用CUDA模板创建新项目。
  • 将项目类型更改为x64,将CUDA设置更改为本机(如果您有启用nv CUDA的卡)或其他设置
  • 该模板将创建自定义生成规则,用nvcc编译.cu文件,用默认编译器编译其他文件
  • 如果vs试图使用C/C++编译器编译.cu文件,请在解决方案资源管理器中单击该文件并禁用该文件的编译(文件图标上的红点)
有关在VS2008上安装CUDA向导的更多信息,请参见

[编辑]
如果不想使用向导,则必须手动设置CUDA lib/include/nvcc路径,并向每个新CUDA程序添加自定义生成规则。有关如何执行此操作的更多信息,请查看Tom的答案。

注意随着CUDA工具包3.2版的发布,NVIDIA现在将规则文件包含在工具包中,而不是SDK中。因此,我将这个答案分为两半,请使用适用于您的工具包版本的正确说明

注意这些说明对Visual Studio 2005和2008有效。有关Visual Studio 2010,请参见


CUDA工具包3.2及更高版本

我建议使用NVIDIA提供的
NvCudaRuntimeApi.rules
文件(或
NvCudaDriverApi.rules
如果使用驱动程序API),该文件随工具包一起发布,并以友好的方式支持最新的编译器标志。就个人而言,我建议不要使用VS向导,但这只是因为我真的认为您不需要它

规则文件(安装在
Program Files\Microsoft Visual Studio 9.0\VC\VCProjectDefaults
目录中)“教”Visual Studio如何编译项目中的任何.cu文件并将其链接到应用程序中

  • 使用标准MS向导创建新项目(例如,空控制台项目)
  • 在.c或.cpp文件中实现主机(串行)代码
  • 在.cu文件中实现包装器和内核
  • 添加
    NvCudaRuntimeApi.rules
    (右键单击项目,自定义生成规则,勾选相关框),请参见备注
  • 添加CUDA运行时库(右键单击项目并选择属性,然后在链接器->常规添加
    $(CUDA\u路径)\lib\$(PlatformName)
    到附加库目录,并在链接器->输入添加
    cudart.lib
    到附加依赖项),请参见注释[2]和[3]
  • (可选)将CUDA include文件添加到搜索路径,如果在.cpp文件(而不是.cu文件)中包含任何CUDA文件,则这是必需的(右键单击项目并选择属性,然后在C/C++->常规中将
    $(CUDA\u路径)\include
    添加到其他包含目录),请参见注释[3]
  • 然后只需构建项目,.cu文件将编译为.obj并自动添加到链接中
其他一些提示:

  • 将代码生成更改为使用静态加载的C运行时来匹配CUDA运行时;右键单击项目并选择Properties,然后在C/C++->Code Generation中将运行时库更改为/MT(或/MTd进行调试,在这种情况下,您需要在运行时API->Host->Runtime Library中镜像该库),请参见注释[4]
  • 使用SDK附带的usertype.dat文件启用语法高亮显示,请参阅
    \C\doc\syntax\u highlighting\visual\u studio\u 8
我还建议使用以下注册表项启用Intellisense支持(将VS2005的9.0替换为8.0,而不是VS2008):

顺便说一句,如果可能的话,我会提倡避免使用cutil,而不是自己检查。NVIDIA不支持Cutil,它只是用来让SDK中的示例专注于实际的程序和算法设计,避免在每个示例中重复相同的事情(例如命令行解析)。如果你写你自己的,那么你将有更好的控制,并会知道发生了什么。例如,如果函数失败,
cutilSafeCall
wrapper调用
exit()
,那么实际应用程序(与示例相反)可能会更优雅地处理失败


CUDA工具包3.1及更早版本

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Languages\Language Services\C/C++]
"NCB Default C/C++ Extensions"=".cpp;.cxx;.c;.cc;.h;.hh;.hxx;.hpp;.inl;.tlh;.tli;.cu;.cuh;.cl"
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Languages\Language Services\C/C++]
"NCB Default C/C++ Extensions"=".cpp;.cxx;.c;.cc;.h;.hh;.hxx;.hpp;.inl;.tlh;.tli;.cu;.cuh;.cl"