如何在Visual Studio 2010中启动CUDA应用程序?

23

直接问题:如何在Visual Studio 2010中创建一个简单的Hello World CUDA项目?

背景:我已经编写了CUDA内核程序。对于来自Visual Studio 2005的.vcproj文件,我非常熟悉——并对其中几个文件进行了手动调整。在VS 2005中,如果我想要构建一个CUDA内核,则需要添加一个自定义构建规则,然后明确地定义nvcc调用以构建文件。

我已经迁移到Win 7和VS 2010,因为我真的想尝试一下nSight。我已经安装了nSight 1.5。但这就是我完全迷失的地方。如果像以前一样继续操作,nvcc会报告它只支持msvc 8.0和9.0。但网站清楚地表明它支持VS 2010。

我在其他地方读到,我需要同时安装VS 2008(msvc 9.0)——我的天啊。我正在这样做。

但我猜我的问题至少部分源于自制的自定义构建工具规格。 多个网站介绍了将*.rules文件添加到构建中,但我知道这仅适用于VS 2008。在“生成自定义”下,我看到CUDA 3.1和3.2,但当我将内核添加到项目中时,它们并没有被构建。 另一个网站宣称关键是三个文件:Cuda.props Cuda.xml Cuda.targets,但它没有说如何或在哪里添加这些文件——或者更确切地说,我将赌注押在我没有理解网站引用的注释上。

那么,有人知道如何在VS 2010中创建一个简单的项目来构建一个CUDA内核吗?使用nSight 1.5设置或随CUDA 3.2 RC一起提供的NvCudaRuntimeApi.v3.2.rules文件。

提前感谢!我想提供赏金,但我总共只有65点。


请注意,这只是一条评论而不是回复。您可能会发现此链接信息丰富:http://forums.nvidia.com/index.php?showtopic=161096 - John Dibling
我看到过这个,但是我不确定是否应该将此补丁应用于nSight 1.5,因为该补丁的最后更新时间是在2010年5月。有人在最新的RC上使用过它吗? - M. Tibbits
3个回答

45

CUDA TOOLKIT 4.0 及以上版本

编译自定义文件(安装在Program Files\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations目录下)"教会"了Visual Studio如何将您项目中的任何.cu文件编译和链接到应用程序。如果您选择跳过安装自定义文件,或者在CUDA之后安装VS2010,则可以通过按照Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\extras\visual_studio_integration中的说明稍后添加它们。

  • 使用标准MS向导创建新项目(例如,空控制台项目)
  • 在.c或.cpp文件中实现您的主机(串行)代码
  • 添加NVIDIA构建定制(右键单击项目,构建定制,勾选相关的CUDA框)
  • 如果使用CUDA 4.0,请查看注释1
  • 在.cu文件中实现您的包装器和内核
  • 如果在构建定制之前添加了.cu文件,则需要将.cu文件的类型设置为(右键单击文件,属性,设置项类型
  • 添加CUDA运行时库(右键单击项目,选择属性,然后在 Input>中添加到附加依赖项
  • 然后只需构建您的项目,.cu文件将自动编译为.obj并添加到链接中

顺带一提,如果可能的话,我建议避免使用cutil,而是自己编写检查代码。Cutil不受NVIDIA支持,它只是用于尝试使SDK中的示例集中于实际的程序和算法设计,并避免在每个示例中重复相同的事情(例如命令行解析)。如果您自己编写,则可以更好地控制并了解发生的情况。例如,cutilSafeCall包装器在函数失败时调用exit() - 真正的应用程序(而不是示例)可能会更优雅地处理失败!


注意

  1. 仅适用于CUDA 4.0,您可能需要应用此修复程序来构建自定义。此补丁修复以下消息:

8

这里有个很好的教程:

http://www.stevenmarkford.com/installing-nvidia-cuda-with-visual-studio-2010/

如果你遇到一个关于'<'的错误,请注意以下步骤(来自先前的答案):

如果在生成定制文件之前添加了 .cu 文件,则需要将 .cu 文件的类型设置为 CUDA C/C++(右键单击该文件,选择属性,设置项目类型)

但是如果你按照他们的步骤进行操作,那么应该可以成功!


链接已经失效。这里提供WayBackMachine的存档 - Sumi Straessle

7

本答案适用于CUDA 3.2,从4.0版本开始,CUDA直接支持VC 10编译器,请参见其他答案了解更多信息

您需要安装VS 2008或6.1 Windows SDK。这是因为NSight 1.5 RC或CUDA 3.2 SDK在内部使用VC 9编译器。我已经成功地安装了2008并且被告知SDK也可以工作,但我没有尝试过。

使用NSight 1.5和/或CUDA 3.2 SDK时,您不需要深入研究任何自定义构建规则。我曾经尝试过,这很痛苦。使用最新版本,所有这些都消失了:

  • 创建VC++项目。
  • 将.CU文件添加到项目中。
  • 在“解决方案资源管理器”中选择项目文件。
  • 打开“项目”|“生成定制...”
  • 勾选“CUDA 3.2 (.targets, .props)”自定义。
  • 选择项目中的一个.CU文件,按下Alt-Enter显示其属性。
  • 确保其项类型设置为“CUDA C/C++”。

它应该只是构建。如果有帮助或遇到问题,请告诉我,因为这是从记忆中得出的。

好消息是,使用VS 2010使CUDA工作变得更加容易。

Ade

顺便说一下:我会更新我的博客文章。


我接受了你的回答,但是由于我暂时回退到了VS 2008,我还没有机会确认你的答案。我会在周末确认一下!非常感谢! - M. Tibbits
我也做了同样的事情,只是几周前才回到VS 2010(为了GTC)。它应该可以工作,如果你有问题请告诉我。 - Ade Miller
这些信息已经过时,CUDA 4.0及更高版本本地支持VS2010(即您不再需要VS2008)。 - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接