1、安装之前必须确认自己电脑的GPU支持CUDA。在设备管理器中找到显示适配器(Display adapters),找到自己电脑的显卡型号,如果包含在http://www.nvidia.com/object/cuda_gpus.html的列表中,说明支持CUDA。
安装CUDA之前最好检查一下自己电脑的显卡驱动版本,版本过老的话,需要更新。有时候安装完毕CUDA之后,运行6中的deviceQuery程序时会出错,请优先考虑显卡驱动的问题。
2、下载NVIDIA CUDA Toolkit ( http://www.nvidia.com/content/cuda/cuda-downloads.html),本人下载的是desktop版本win32
CUDA5.0已经将ToolKit和SDK等整合在了一起,因此只需下载一个安装文件即可。
3、首先确认自己已经安装Visual Studio 2010 后再安装助手Visual Assist X。这里Visual Assist X 对于使用CUDA 不是必须的,但为了使程序编写更为方便,这里推荐安装。
4、CUDA的默认安装目录为:C:\Program Files\NVIDIA GPU Computing Toolkit\ 这里推荐使用默认的安装路径,不需更改。
5、安装完成后,在系统环境里面会发现新添加了两个环境变量:CUDA_PATH_V5_0和CUDA_PATH。但是这些还不够。保险起见,手动配置环境变量。在系统环境变量中新建如下项:
CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\common
CUDA_LIB_PATH = %CUDA_PATH%\lib\Win32
CUDA_BIN_PATH = %CUDA_PATH%\bin
CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\Win32
CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\Win32
然后在系统环境变量Path 后添加如下内容:
;%CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_LIB_PATH%;%CUDA_SDK_BIN_PATH%;
6、此时CUDA已经安装成功。可以测试运行。
(1)、启动命令行,Start > All Programs > Accessories > Command Prompt,输入nvcc -V查看版本信息。
(2)、运行例子程序deviceQuery。路径在如下位置:
Windows XP:
C:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\CUDASamples\v5.0\C\bin\win32\Release
Windows Vista, Windows 7, Windows 8, Windows Server 2003, and Windows Server2008:
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\C\bin\win32\Release
(详见http://download.csdn.net/detail/diyoosjtu/4945848)
运行结果如下:
(3)、运行bandwidthTest示例程序,结果如下:
(4)、运行Particles示例程序,观看效果。
若以上都运行正常,说明CUDA安装成功。
7、CUDA C/C++关键字及函数高亮显示
这个设置是让Visual Studio2010 在编辑.cu 文件时,把.cu 文件里的C/C++语法高亮。设置方法: 在Visual Studio 2010 的菜单依次选“ Tools|Options|Text Editor|File Extension(工具|选项|文本编辑器|文件扩展名)”,在该窗口中将“Editor(编辑器)”下拉框选择“Microsoft Visual C++”,在“Extension(扩展名)”文本框中输入cu 点击“Add(添加)”按钮,重复工作把cuh 添加为Visual C++类型,添加完成后点击“OK(确定)”按钮,如下图所示:
为了让CUDA 的关键字,如__device__、dim3 等的文字高亮,需按如下步骤设置:
将C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\doc\syntax_highlighting\visual_studio_8 目录下的usertype.dat 文件复制到C:\Program Files\Microsoft Visual Studio10.0\Common7\IDE\ 目录下( 对x64 位Win7 系统为X:\Program Files(X86)\Microsoft Visual Studio 10.0\Common7\IDE\)。重启Visual Studio 2010 后打开.cu 文件,CUDA 的关键字应该变成蓝色了。
8、CUDA 函数高亮,及CUDA 函数输入代码提示
实现这个功能需要使用Visual Assist X,如果没有安装支持Visual Studio 2010的Visual Assist X,这部分功能无法实现。这里只是为使编写代码更加方便,对CUDA 程序的开发无实质性障碍。
如果已经安装Visual Assist X,可以通过以下两步实现需要的功能。
1)使Visual Assist X 支持CUDA 函数高亮和代码完成
在Visual Studio 2010 的菜单里依次选择:“ VAssistX|Visual assist X Options|Projects|C/C++Directories”,在该界面的“Platform”下拉框中选择Custom,在“Show Directories for”下拉框中选择Other include files, 然后在下面的输入框里,新建、添加如下路径,如图:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\common\inc
使Visual Assist X 实现.cu 文件高亮和代码完成功能,需要编辑注册表。在修改注册表时,为避免带来不必要的错误请先关闭Visual Studio 2010。使用Win+R组合键打开“运行”窗口,键入入regedit 命令(register edit 的缩写)打开注册表,找到如下位置:HKEY_CURRENT_USER\Software\Whole Tomato\Visual Assist X\VANet10。在右边找到ExtSource 项目,鼠标右键选修改,在原有文字后添加如下文字:.cu;.cuh; 确定后关闭注册表。重新打开Visual Studio 2010,Visual Assist X 便开始支持.cu 及.cuh 文件的语法高亮及代码完成。此时.cu 文件的CUDA 函数是高亮的,使用函数名符号就会自动提示函数全称,参数类型等信息。
修改注册表时,请把vs关闭,否则修改不成功。
9、其余的重要配置:
在“Additional Libraries Directories”下添加“$(CUDA_PATH_V5_0)\lib\$(Platform);”(下图只是示意,其中的路径按照自己安装之后的来设置,也可以直接定位到文件夹的绝对路径)
在“Additional Dependencies”中添加“cudart.lib;”
10、经过上面的安装,开发程序应该没问题了,但会发现有如下的问题:
(1). VS2010显示.cu文件时,有很多CUDA函数下有波浪线
(2). 在.cu文件里使用VS2010的“Go to definition”功能查无法找到CUDA函数的定义。
这两个问题的原因是VS2010不认识这些函数,没有指定它们在那个头文件里包含的。解决方法其实是一样的,把CUDA tookit 和CUDA SDK的头文件路径加到VS2010的VC++目录里面。
解决方法如下:
在VC++目录的include directories中,添加C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include
如下图所示:
到此,所有的配置都已经完成了。
O(∩_∩)O~
11、创建工程
在Visual Studio 2010 菜单选择“file|new|project(文件|新建|工程)”,在打开的新建项目窗口的“已安装的模板”一栏中选择“NVIDIA|CUDA”,类型选择为“CUDA 5.0 Runtime”,见下图。
在“名称”中输入工程名后,点击确定。可对系统提供的kernel.cu 示例进行编译运行,运行结果如下图。
将kernel.cu中的main函数重命名后,添加新的.cu文件,写入如下代码:
- #include< stdio.h>
- #include "cuda_runtime.h"
- #include "device_launch_parameters.h"
- bool InitCUDA()
- {
- int count;
- cudaGetDeviceCount(&count);
- if(count == 0)
- {
- fprintf(stderr, "There is no device.\n");
- return false;
- }
- int i;
- for(i = 0; i < count; i++)
- {
- cudaDeviceProp prop;
- if(cudaGetDeviceProperties(&prop, i) == cudaSuccess)
- {
- if(prop.major >= 1)
- {
- break;
- }
- }
- }
- if(i == count)
- {
- fprintf(stderr, "There is no device supporting CUDA 1.x.\n");
- return false;
- }
- cudaSetDevice(i);
- return true;
- }
- int main()
- {
- if(!InitCUDA())
- {
- return 0;
- }
- printf("HelloWorld, CUDA has been initialized.\n");
- return 0;
- }
#include< stdio.h>
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
bool InitCUDA()
{
int count;
cudaGetDeviceCount(&count);
if(count == 0)
{
fprintf(stderr, "There is no device.\n");
return false;
}
int i;
for(i = 0; i < count; i++)
{
cudaDeviceProp prop;
if(cudaGetDeviceProperties(&prop, i) == cudaSuccess)
{
if(prop.major >= 1)
{
break;
}
}
}
if(i == count)
{
fprintf(stderr, "There is no device supporting CUDA 1.x.\n");
return false;
}
cudaSetDevice(i);
return true;
}
int main()
{
if(!InitCUDA())
{
return 0;
}
printf("HelloWorld, CUDA has been initialized.\n");
return 0;
}
用 Ctrl+F5 运行,通过nvcc编译成功,输出结果:
成功!!