VS2012+cuda7.5的环境配置:前提需要有NVIDIA的显卡驱动,以及安装dir9.0 dir 11.0
,注意,directX这两个版本都需要,因为升级后的d11对d9中的一些接口进行了修改。本人就是因为没有安装d9而直接安装的d11导致了程序运行错误,找了很久都没解决。
首先,需要准备cuda_7.5.18_windows.exe
下载地址可以通过百度搜索NVIDIA官网,下载cuda这个版本,此版本安装包相比之前的版本有所提高,将cuda SDK也封装进入了安装程序。
第一步,运行,重点是安装设置的选择时记得选择自定义(不要使用默认安装),之后全选所有安装子项目。
在选择安装位置这个界面:有CUDA TOOLKIT,CUDA SAMPLES,CUDA Documentation这三个安装路径的选择,个人推荐使用默认的安装目录。
之后一直安装,成功。
第二步,环境配置,正确安装的CUDA7.5在系统变量下会自动生成两个变量,分别是CUDA_PATH和CUDA_PATH_V7_5,我们需要对系统变量进行一些拓展,以下是变量名和变量的值:
CUDA_LIB_PATH %CUDA_PATH%\lib\Win32
CUDA_BIN_PATH %CUDA_PATH%\bin
CUDA_SDK_PATH C:\ProgramData\NVIDIA Corporation\CUDASamples\v7.5
CUDA_SDK_BIN_PATH %CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH %CUDA_SDK_PATH%\common\lib\x64
记得重新启动计算机使变量生效。
第三步:建立vs2012的cuda程序
1创建工程的步骤和创建普通的工程的步骤是一样的。
2源文件中创建CUDA C/C++ File
3之后,右键项目工程名,选择生成自定义,选中CUDA这个文件确定。
4之后,右键工程名,选择属性,在配置属性界面>>VC++目录,
添加两个包含目录:
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5\include
C:\ProgramData\NVIDIA Corporation\CUDASamples\v7.5\common\inc
添加两个lib目录:
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5\lib\x64
C:\ProgramData\NVIDIA Corporation\CUDASamples\v7.5\common\lib\x64
5右键项目 -> 属性 -> 配置属性 ->连接器 -> 常规 -> 附加库目录,添加以下目录:
$(CUDA_PATH_V7_5)\lib\$(Platform)
6右键项目 -> 属性 -> 配置属性 ->连接器 -> 输入 -> 附加依赖项,添加以下库:
cublas.lib
cublas_device.lib
cuda.lib
cudadevrt.lib
cudart.lib
cudart_static.lib
cufft.lib
cufftw.lib
curand.lib
cusparse.lib
nppc.lib
nppi.lib
npps.lib
nvblas.lib
nvcuvid.lib
OpenCL.lib
第四步:在配置管理器中将使用的平台修改为64位
第五步:
项目文件右键,选择属性。
常规-》项类型,将项类型修改为CUDA C/C++
(注意,如果这个没有修改,vs2012会找不到函数的入口点,会报错:
无法解析的外部符号 main,该符号在函数 __tmainCRTStartup 中被引用)
第六步: 测试,
给出以下两个测试代码
#include <stdio.h>
#include <iostream>
//For the CUDA runtime routines (prefixed with "cuda_")
#include <cuda_runtime.h>
__global__ void Add(int a ,int b,int *c)
{
*c = a+b;
}
int main()
{
int c;
int *devc;
cudaError_t err = cudaSuccess;
err =cudaMalloc((void **)&devc,sizeof(int));
if (err != cudaSuccess)
{
fprintf(stderr, "Failed toallocate device vector A (error code %s)!\n",cudaGetErrorString(err));
exit(EXIT_FAILURE);
}
Add<<<1,1>>>(2,7,devc);
err =cudaMemcpy(&c,devc,sizeof(int),cudaMemcpyDeviceToHost);
if (err != cudaSuccess)
{
fprintf(stderr, "Failed toallocate device vector A (error code %s)!\n",cudaGetErrorString(err));
exit(EXIT_FAILURE);
}
printf("2+7=%d\n",c);
cudaFree(devc);
system("pause");
return 0;
}
//第二个测试代码
/*
#include<stdio.h>
boolInitCUDA()
{
int count;
cudaGetDeviceCount(&count);
if(count == 0)
{
fprintf(stderr, "There is nodevice.\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 nodevice supporting CUDA 1.x.\n");
return false;
}
cudaSetDevice(i);
return true;
}
intmain()
{
if(!InitCUDA())
{
return 0;
}
printf("HelloWorld, CUDA has beeninitialized.\n");
return 0;
}
*/
在完成测试之后,可以发现vs2012编译器并不是支持cuda的.cu或者.cuh格式的文件,以及Visual Assist也不支持,所以要进行相应的修改。
CUDA C/C++关键字和函数高亮显示:
在上面HelloWorldCuda.cu文件中发现CUDA C/C++的关键字__global__等没有高亮显示,而且还有下划曲线。下面进行CUDA C/C++关键字和函数的语法高亮显示,配置Visual AssistX 函数高亮,代码提示等功能。
下面是关于代码高亮的设置。共三个设置
1. .cu文件中C/C++关键字高亮
这个设置是让VS2010编辑.cu文件时,把.cu文件里的C/C++语法高亮。
设置方法: 在VS2010的菜单 依次点击:“Tools|Options…|Text Editor|File Extension”,在这个界面里: “Editor”下拉框选“Microsoft Visual C++”,在“Extension”文本框输入.cu 点击“Add”按钮 ,重复工作把.cuh添加为vc++类型,点击确定按钮。 把全部.cu文件关闭,再打开,.cu文件C++关键字就高亮了。如果不行就重启VS2010。但是CUDA的关键字还是黑色的,下一步把CUDA关键自高亮显示。
2. CUDA关键字高亮
为了让CUDA的关键字,如__device__、dim3之类的文字高亮,需要如下步骤:
把SDK_PATH\C\doc\syntax_highlighting\usertype.dat 复制到X:\Program Files (X86)\Microsoft Visual Studio10.0\Common7\IDE\目录下
这里 X:是安装VS2010盘符,这是win7 64位下的路径。
注意:win7 64系统不要复制到这个目录里,复制到这里是不会CUDA关键字高亮的:
X:\Program Files \MicrosoftVisual Studio 10.0\Common7\IDE\
(如果你的win7是32位的,可能正好是上面这个目录,应该会高亮的,这是win7 64位和32位的差别)
再次强调:SDK_PATH要换成你安装SDK的实际路径,不要直接使用这个字符串。
VS2010需要重启,重启后打开.cu文件,CUDA的关键字应该变成蓝色了。
3. CUDA函数高亮,及CUDA函数输入代码提示
实现这个功能就要使用VAssistX了。 首先安装支持VS2010的Visual AssistX, 在CUDA 安装前、后安装都行。需要两步实现需要的功能:
a) 让Visual AssistX支持CUDA函数高亮和代码完成。在VS2010菜单里依次点击: “VAssistX->Visual assist X Options->Projects->C/C++Directories”在这个界面的 “Platform”下拉框选 Custom,在“Show Directories for..“下拉框选 Other include files, 然后在下面的输入框里,新建、添加三个路径,点击确定,三个路径分别如下:
SDK_PATH的\c\common\inc
SDK_PATH的\shared\inc
X:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include
这里SDK_PATH要用你安装的SDK路径代替,X:是你的CUDAtoolkit安装盘符。
这样分别在这三个目录里面的.h文件定义的函数和类型VAssistX会帮我们在编辑文件时候实现高亮和完成代码。如果少包含一个路径,这个目录里的.h定义的函数和类型就不会高亮和提示了。
b) 让Visual AssistX支持.cu文件,也就让Visual AssistX帮我们实现.cu文件高亮和代码完成功能,需要编辑注册表。首先关闭VS2010,点击开始菜单输入regedit打开注册表,找到如下位置:HKEY_CURRENT_USER\Software\Whole Tomato\Visual Assist X\VANet11。在右边找到ExtSource项目,鼠标右键选修改,在原有文字后添加如下文字:.cu;.cuh; 确定后关闭注册表,重新打开vs2010,VisualAssistX开始支持.cu及.cuh文件的语法高亮及代码完成。此时.cu文件的CUDA函数是高亮的,使用函数名符号就会自动提示函数全称,参数类型等信息了。
经过上面的安装,开发程序应该没问题了,但会发现有如下的问题:
1. VS2010显示.cu文件时,有很多CUDA函数下有波浪线
2. 在.cu文件里使用VS2010的“Go to definition”功能查无法找到CUDA函数的定义。
这两个问题的原因是VS2010不认识这些函数,没有指定它们在那个头文件里包含的。解决方法其实是一样的,把CUDA tookit 和CUDA SDK的头文件路径加到VS2010的VC++目录里面。