[英]How do I start a new CUDA project in Visual Studio 2008?
这是一个非常基本的问题,但如何在Visual Studio 2008中启动新的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 ==========
注意随着CUDA Toolkit 3.2版的发布,NVIDIA现在包含带有Toolkit的规则文件而不是SDK。 因此,我将这个答案分成两半,使用适用于您的Toolkit版本的正确说明。
注意这些说明适用于Visual Studio 2005和2008.对于Visual Studio 2010,请参阅此答案 。
CUDA TOOLKIT 3.2及更高版本
我建议使用NVIDIA提供的NvCudaRuntimeApi.rules
文件(如果使用驱动程序API,则使用NvCudaDriverApi.rules
),它随工具包一起发布,并以友好的方式支持最新的编译器标志。 就个人而言,我建议不要使用VS向导,但这只是因为我真的不认为你需要它。
规则文件(安装在Program Files\\Microsoft Visual Studio 9.0\\VC\\VCProjectDefaults
目录中)“教”Visual Studio如何编译和链接项目中的任何.cu文件到您的应用程序中。
NvCudaRuntimeApi.rules
(右键单击项目, 自定义构建规则 ,勾选相关框),参见注释1 $(CUDA_PATH)\\lib\\$(PlatformName)
到附加库目录和链接器 - >输入添加cudart.lib
到附加依赖项 ),见注释[2]和[3] $(CUDA_PATH)\\include
在附加包含目录中 ,参见注释[3] 其他一些提示:
<sdk_install_dir>\\C\\doc\\syntax_highlighting\\visual_studio_8
我还建议使用以下注册表项启用Intellisense支持(对于VS2005而不是VS2008,将9.0替换为8.0):
[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"
顺便提一句,如果可能的话,我会提倡避免使用cutil ,而是自己检查。 NVIDIA不支持Cutil,它仅用于尝试将SDK中的示例集中在实际程序和算法设计上,并避免在每个示例中重复相同的事情(例如命令行解析)。 如果你自己编写,那么你将拥有更好的控制权并且会知道发生了什么。 例如,如果函数失败, cutilSafeCall
包装器调用exit()
- 一个真正的应用程序(而不是样本)应该可以更优雅地处理失败!
CUDA TOOLKIT 3.1及更早版本
我会使用NVIDIA提供的Cuda.rules
文件和SDK,它与工具包一起发布,并以友好的方式支持最新的编译器标志。 就个人而言,我建议不要使用VS向导,但这只是因为我真的不认为你需要它。
规则文件(在SDK的C \\ common目录中)“教”Visual Studio如何编译和链接项目中的任何.cu文件到您的应用程序中。
Cuda.rules
(右键单击项目, 自定义构建规则 ,浏览规则文件并确保勾选) $(CUDA_LIB_PATH)
到Additional Library Directories和Linker - > Input add cudart.lib
到Additional Dependencies ),参见注释[ 2]下面 $(CUDA_INC_PATH)
到其他包含目录 ) 其他一些提示:
<sdk_install_dir>\\C\\doc\\syntax_highlighting\\visual_studio_8
我还建议使用以下注册表项启用Intellisense支持(对于VS2005而不是VS2008,将9.0替换为8.0):
[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"
顺便提一句,如果可能的话,我会提倡避免使用cutil ,而是自己检查。 NVIDIA不支持Cutil,它仅用于尝试将SDK中的示例集中在实际程序和算法设计上,并避免在每个示例中重复相同的事情(例如命令行解析)。 如果你自己编写,那么你将拥有更好的控制权并且会知道发生了什么。 例如,如果函数失败, cutilSafeCall
包装器调用exit()
- 一个真正的应用程序(而不是样本)应该可以更优雅地处理失败!
注意
NvCudaRuntimeApi.v3.2.rules
。 这意味着不是在%CUDA_PATH%中查找CUDA工具包,而是查看%CUDA_PATH_V3_2%,这反过来意味着您可以在系统上安装多个版本的CUDA Toolkit,并且不同的项目可以针对不同的版本。 另见注释[3]。 LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs
)或多个定义的符号用于标准库函数,那么这应该是你的第一个嫌疑人。 真是个好问题! 对于那里的所有CUDA文档,我一直认为这是一个明显的遗漏...事实上,我很高兴我找到了这篇文章,因为在使用CUDA很长一段时间后,我仍然没有找到了一个正式的, 正确的方法让VS从头开始制作CUDA程序。
当我需要启动一个新的CUDA程序时,我总是只复制并修改SDK目录中的“ 模板 ”示例。 这可能不是你想要的,因为它没有重新开始,但它是一个快速的方法来获得一个支持CUDA的项目在VS中使用所有正确的项目/文件名...
有关在VS2008上安装CUDA向导的其他信息,请访问 此处和此处
[编辑]
如果您不想使用向导,则必须手动设置CUDA lib / include / nvcc路径,并为每个新的CUDA程序添加自定义构建规则。 有关其他信息,请参阅Tom's Answer。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.