CUDA(Compute Unified Device Architecture)到目前已经发布到4.2了,建议安装最新的,但是因为笔记本目前只支持cuda3.2,所以我只安装了cuda3.2。
cuda版本见官网:http://developer.nvidia.com/cuda-toolkit-archive
首先必须说的:本文题目是cuda3.2+vs2008,其实cuda其他版本和vs其他版本安装是一样的。
可以用一个工具CUDA-Z检测一下显卡设备是否支持CUDA,这个工具还可以查看显卡设备的一些计算相关属性。
对了,一定要先将Visual Studio工具安装了,要不怎么玩呢是吧
1. 安装所需文件
共需三个文件:CUDA driver、toolKit、SDK
①CUDA driver:名字很高级,其实就是显卡驱动,能够在显卡上跑起cuda程序所需的驱动。很多博客文章里说显卡驱动必须和toolKit、SDK的版本一致,其实不是这样的,显卡驱动和toolKit、SDK一致当然可以,显卡驱动版本更高那也是可以的。CUDA driver通常有个版本号,比如260.99,你可以用驱动人生或驱动之家之类的软件查看一下当前的显卡驱动,后5位数字就是版本号,当前安装的驱动如果比要求的驱动版本低,那就要更新驱动了,更新到要求的或比要求高的都是可以的。不建议下载官网的驱动,速度太慢。。。
②toolKit:打开http://developer.nvidia.com/cuda-toolkit-32-downloads,找到适合需要的版本下载之
③SDK:同样找到需要的sdk下载之
我win32系统所需的两个工具包如下图:
安装:按此顺序安装即可 驱动->toolKit->SDK
2.检测安装是否成功
三个步骤搞定后,桌面上有个NVIDIA GPU Computing SDK 3.2 Browser快捷方式,打开之,里面有很多示例,随便run一个,比如ocean_FFT,看到有一个模拟海平面的画面出来,说明你的安装成功了。
安装成功已完成第一步,下面就是如何成功地在VS2008中运用cuda
3.配置环境变量
安装好后,会默认配置好系统环境变量,比如CUDA_BIN_PATH、CUDA_INC_PATH、CUDA_LIB_PATH、NVSDKCOMPUTE_ROOT
这里,只需要在系统变量中Path值中添加一下sdk中的debug和release路径,如下:
...;C:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\bin\win32\Debug;C:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\bin\win32\Release
4.vs中运用cuda
sdk中有很多示例的工程文件,假如cuda sdk采用的是默认路径,那么示例在C:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\src里面(注意该路径默认如果是隐藏的,就在文件夹选项内设置显示所有文件和文件夹)
打开VS2008,打开项目,项目选择上面示例中的ocean_FFT,编译运行一下,是否也成功了?不出意外当然是可以运行的,因为这是人家专门做的示例程序,要不能编译运行那估计是你vs的问题。
5.在项目中用cuda
上面是用的别人的工程,自己怎么在工程中用cuda呢?网上会有很多人建议使用开勇的CUDA_VS_Wizard,这个工具确实牛逼,在cuda版本还是很低的时候确实是神兵利器,但是现在cuda3.2如果自己建工程也是不需要那么多的手工配置的,因为安装完toolKit后会有VS的生成规则的文件,在工程中加入该文件即可。实施不走如下:
首先建立一个空的win32控制台应用程序,建完后是什么文件都没有的;
然后在工程文件内新建一个.txt文件,在里面添加代码(代码在书上或网上抄一段,如果找不到,复制下段代码)
1 /*****第一个CUDA程序*******/ 2 3 #include <stdio.h> //C标准输入输出接口 4 #include <stdlib.h> 5 #include <cuda_runtime.h> //使用runtime API 6 7 //CUDA初始化 8 bool InitCUDA() 9 { 10 int count; 11 //传回有计算能力的设备数(≥1),没有回传回1,device 0是一个仿真装置,不支持CUDA功能 12 cudaGetDeviceCount(&count); 13 14 if(count == 0) //没有cuda计算能力的设备 15 { 16 fprintf(stderr,"There is no device.\n"); 17 return false; 18 } 19 20 int i; 21 for(i=0;i<count;i++) 22 { 23 cudaDeviceProp prop; //设备属性 24 if (cudaGetDeviceProperties(&prop,i)==cudaSuccess) //取得设备数据,brief Returns information about the compute-device 25 { 26 if (prop.major>=1) //cuda计算能力 27 { 28 break; 29 } 30 } 31 } 32 33 if (i==count) 34 { 35 fprintf(stderr,"There is no device supporting CUDA 1.x\n"); 36 return false; 37 } 38 39 cudaSetDevice(i); //brief Set device to be used for GPU executions 40 return true; 41 } 42 43 int main() 44 { 45 if (!InitCUDA()) 46 { 47 return 0; 48 } 49 printf("CUDA initialized.\n"); 50 }
然后将.txt文件重命名为.cu文件,在项目中加入该.cu文件
下面进行项目属性设置
详细图文设置见http://www.cnblogs.com/Romi/archive/2012/04/20/2459669.html
项目名右键,选择自定义生成规则,在可用规则文件里面选择CUDA Runtime API Rule(v3.2)
这时项目属性的配置属性里就多了CUDA Runtime API这个选项,里面已经设置好了不用去管它
再在配置属性—链接器—常规选项的附加库目录里面,添加$(NVSDKCOMPUTE_ROOT)\C\common\lib和$(CUDA_LIB_PATH)
在配置属性—链接器—输入选项的附加依赖项里添加cudart.lib cutil32D.lib
编译运行。。。显卡支持cuda会出现CUDA initialized. 如果有问题,建议打开sdk中的工程看下别人是怎么设置的,然后用到本项目下
题外话:如果你是使用开勇的CUDA_VS_Wizard,编译或链接或显示结果出现问题都不要奇怪,因为这个工具用的是cuda2,生成规则要换成v3.2版的,而且链接库的路径名可能不同也要修改,另外,使用该向导写程序不能跟踪调试。
6.添加Visual Asissit X支持
上面的.cu文件内的代码没有语法高亮,Visual Asisst X工具可以完成该功能,该部分网上有详细的方案,这里我将步骤摘录下来:
设置好了后,工程中添加cuda文件就不需要再用txt转了,在添加新项里就有cuda文件(.cu文件)
最后,祝CUDA之旅愉快!