在Visual Studio中使用CUDA和Thrust

来源:互联网 发布:ps移花接木软件 编辑:程序博客网 时间:2024/05/06 09:38

http://cuda.it168.com/a2011/0622/1208/000001208129_all.shtml

【IT168 专稿】我正在建立一些新的CUDA原型项目,旨在弄清楚如何最好地使用CUDA 4.0,我把它写成一个快速教程,教你如何使用Visual Studio 2010中的CUDA和最新的C++0x特性编写一个简单的应用程序。

  因为目前CUDA SDK要求项目使用v90工具集(Visual Studio 2008)编译,解决方案需要两个项目,一个包括CUDA目标v90的DLL项目,一个目标v100(Visual Studio 2010)包含C++代码的项目。

  安装依赖

  确保你安装了以下依赖软件包

  ● Visual Studio 2010和2008 SP1(CUDA需要)

  ● Parallel NSight 1.51

  ● CUDA 4.0 RC或3.2,以及Thrust

  本文引用的例子全部使用的是CUDA 4.0 RC,如果你没有安装CUDA 4.0,它们也可以在3.2环境下工作。

  设置解决方案

  创建一个包含两个项目的解决方案,需要两个项目是因为一个目标是v100(Visual Studio 2010)编译器,允许使用最新的C++0x语言功能,另一个目标是v90(Visual Studio 2008)编译器,因为CUDA需要它。

  1)创建一个Win32控制台应用程序,取名HelloWorld,在向导的所有设置窗口全部保留默认设置,这个项目将包含应用程序的主入口点和所有Windows特定代码,如管理线程要用到的并行模式库(Parallel Patterns Library,PPL)。


▲图 1 创建一个Win32控制台应用程序

  2)创建第二个Win32项目,取名HelloWorldCuda,这个DLL将包含你的CUDA代码,在应用程序设置窗口,应用程序类型选择DLL,并选中空白项目复选框。


▲图 2 创建一个Win32项目


▲图 3 在附加选项中,选中“空白项目”


  配置CUDA项目

  在HelloWorldCuda项目有很多设置需要配置。

  3)配置HelloWorldCuda项目

  3.1)选择“项目”*“生成自定义”菜单选项,在对话框中选择CUDA 4.0项目,这一步会添加对CUDA C/C++文件的支持,但在项目属性的生成设置窗口显示之前,还需要一个.cu规则文件,如果你没有CUDA 4.0,那么请使用3.2规则。


▲图 4 在生成自定义对话框中选择CUDA 4.0

  3.2)添加两个新文件到项目中,一个名为Hello.cpp的C++文件(.cpp)和一个名为Hello.h的头文件(.h),将.cpp文件重命名为Hello.cu,你的解决方案树形结构看起来应该像下图这样:


▲图 5 解决方案树形结构

  3.3)选择Hello.cu文件,打开它的属性窗口,在“常规”选项卡中,将“项目类型”修改为“CUDA C/C++”。


▲图 6 将项目类型设为CUDA C/C++

  3.4)选择项目,打开属性窗口(Alt+回车),在“常规”选项卡,将“平台工具集”字段设为“v90”,如果你不能这样设置,可能是因为没有安装Visual Studio 2008的缘故,再次提醒,CUDA需要它。


▲图 7 设置平台工具集

  3.5)打开“链接程序”*“常规”属性窗口,在“附加库目录”字段添加“$(CUDA_PATH_V4_0)\lib\$(Platform);”。


▲图 8 设置附加库目录

  现在应该可以看到CUDA C/C++属性选项卡了。

  3.6)打开“链接程序”*“输入”属性窗口,在“附加依赖”字段添加“cudart.lib;”。


▲图 9 设置附加依赖

  3.7)确保你的项目总是按正确的顺序生成,在HelloWorld项目上点击右键,选择“项目依赖”,选中旁边的HelloWorldCuda复选框,这样会强制HelloWorldCuda项目在HelloWorld之前生成。

  4)至此,生成解决方案应该没有任何警告或错误了。


  添加一些CUDA/Thrust代码

  现在是时候添加一些代码了,我们需要在HelloWorldCuda DLL中增加一些CUDA代码,并输出它,以便HelloWorld应用程序可以执行它。

  5)配置HelloWorld项目,它需要链接HelloWorldCuda,也要能够访问与之对应的头文件。

  5.1)打开“链接程序”*“常规”属性窗口,在“附加库目录”字段增加“..\$(Configuration);$(CUDA_PATH_V4_0)\lib\$(Platform);”。


▲图 10 设置附加库目录

  5.2)打开“链接程序”*“输入”属性窗口,在“附加依赖”字段增加“cudart.lib;HelloWorldCuda.lib;”。


▲图 11 设置附加依赖

  5.3)打开“C/C++”*“常规”属性窗口,在“附加包含目录”字段增加“..\HelloWorldCuda\; $(CUDA_PATH_V4_0)\Include;”。


▲图 12 设置附加包含目录

  5.4)单击“项目”*“项目依赖”菜单选项,选中HelloWorldCuda复选框,让CUDA项目成为Win32主应用程序项目的依赖。


▲图 13 让HelloWorldCuda成为HelloWorld项目的依赖

  6)现在是时候写一点代码了。CUDA 4.0引入了Thrust,因此我计划在给出的例子中使用Thrust,如果你没有使用4.0,那你需要下载最新的Thrust库,将其拷贝到CUDA SDK包括文件“%CUDA_PATH%\include\thrust”下。

  我们所举的例子是一个Hello World应用程序,因此代码非常简单,它是Thrust项目主页上第一个示例的变种。

  添加下面的类声明到Hello.h文件中,大多数代码修复了编译警告,需要做的是声明一个使用host_vector构造的类,然后有一些方法执行CUDA代码并返回结果。

原创粉丝点击