vs2013怎样配置测试cuda是否安装成功自带的samples

win7(X64)系统下cuda7.5和VS2013的配置 - sophia_hxw - 博客园
人生有三恨,一恨鲫鱼有刺,二恨海棠无香,三恨红楼未完!----------张爱玲
posts - 65, comments - 2, trackbacks - 0, articles - 0
cuda7.5文件:链接:/s/1bU2zIQ 密码:nvyw
&2 环境变量
注意:CUDA_PATH是安装好cuda7.5之后会默认创建的,ProgramData是隐藏目录,要修改其属性,使其可见。
CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5
CUDA_LIB_PATH = %CUDA_PATH%\lib\x64CUDA_BIN_PATH = %CUDA_PATH%\binCUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\x64CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64
然后,在系统的path变量之后追加下面一行:
;%CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_LIB_PATH%;%CUDA_SDK_BIN_PATH%;
&3 VS中的配置
新建一个空的项目,右边解决方案资源管理器,源文件上右键单击-&添加新建项-&CUDA C/C++ file
项目上右键单击-&生成依赖项-&生成自定义,选择CUDA7.5
项目上右键单击-&属性-&配置属性-&VC++目录-&包含目录
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include    C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5\common\inc
项目上右键单击-&属性-&配置属性-&VC++目录-&库目录
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64    C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5\common\lib\x64
项目上右键单击-&属性-&配置属性-&链接器-&常规-&附加库目录
    $(CUDA_PATH_V7_5)\lib\$(Platform)
项目上右键单击-&属性-&配置属性-&链接器-&输入-&附加依赖项
    cublas.lib    cublas_device.lib    cuda.lib    cudadevrt.lib    cudart.lib    cudart_static.lib    cufft.lib    cufftw.lib    curand.lib    cusolver.lib    cusparse.lib    nppc.lib    nppi.lib    npps.lib    nvblas.lib    nvcuvid.lib    nvrtc.lib    OpenCL.lib
  就是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64目录下的库。
单击菜单栏中的生成-&配置管理器
    将平台改为X64
1 // CUDA runtime 库 + CUBLAS 库
2 #include "cuda_runtime.h"
3 #include "cublas_v2.h"
5 #include &time.h&
6 #include &iostream&
8 using namespace
10 // 定义测试矩阵的维度
11 int const M = 5;
12 int const N = 10;
14 int main()
16 // 定义状态变量
17 cublasStatus_
19 // 在 内存 中为将要计算的矩阵开辟空间
20 float *h_A = (float*)malloc(N*M*sizeof(float));
21 float *h_B = (float*)malloc(N*M*sizeof(float));
23 // 在 内存 中为将要存放运算结果的矩阵开辟空间
24 float *h_C = (float*)malloc(M*M*sizeof(float));
26 // 为待运算矩阵的元素赋予 0-10 范围内的随机数
27 for (int i = 0; i&N*M; i++) {
28 h_A[i] = (float)(rand() % 10 + 1);
29 h_B[i] = (float)(rand() % 10 + 1);
33 // 打印待测试的矩阵
34 cout && "矩阵 A :" &&
35 for (int i = 0; i&N*M; i++){
36 cout && h_A[i] && " ";
37 if ((i + 1) % N == 0) cout &&
39 cout &&
40 cout && "矩阵 B :" &&
41 for (int i = 0; i&N*M; i++){
42 cout && h_B[i] && " ";
43 if ((i + 1) % M == 0) cout &&
45 cout &&
48 ** GPU 计算矩阵相乘
51 // 创建并初始化 CUBLAS 库对象
52 cublasHandle_
53 status = cublasCreate(&handle);
55 if (status != CUBLAS_STATUS_SUCCESS)
57 if (status == CUBLAS_STATUS_NOT_INITIALIZED) {
58 cout && "CUBLAS 对象实例化出错" &&
60 getchar();
61 return EXIT_FAILURE;
64 float *d_A, *d_B, *d_C;
65 // 在 显存 中为将要计算的矩阵开辟空间
66 cudaMalloc(
67 (void**)&d_A, // 指向开辟的空间的指针
68 N*M * sizeof(float) // 需要开辟空间的字节数
70 cudaMalloc(
71 (void**)&d_B,
72 N*M * sizeof(float)
75 // 在 显存 中为将要存放运算结果的矩阵开辟空间
76 cudaMalloc(
77 (void**)&d_C,
78 M*M * sizeof(float)
81 // 将矩阵数据传递进 显存 中已经开辟好了的空间
82 cublasSetVector(
83 N*M, // 要存入显存的元素个数
84 sizeof(float), // 每个元素大小
85 h_A, // 主机端起始地址
86 1, // 连续元素之间的存储间隔
87 d_A, // GPU 端起始地址
88 1 // 连续元素之间的存储间隔
90 cublasSetVector(
92 sizeof(float),
99 // 同步函数
100 cudaThreadSynchronize();
102 // 传递进矩阵相乘函数中的参数,具体含义请参考函数手册。
103 float a = 1; float b = 0;
104 // 矩阵相乘。该函数必然将数组解析成列优先数组
105 cublasSgemm(
106 handle, // blas 库对象
107 CUBLAS_OP_T, // 矩阵 A 属性参数
108 CUBLAS_OP_T, // 矩阵 B 属性参数
109 M, // A, C 的行数
110 M, // B, C 的列数
111 N, // A 的列数和 B 的行数
112 &a, // 运算式的 & 值
113 d_A, // A 在显存中的地址
114 N, // lda
115 d_B, // B 在显存中的地址
116 M, // ldb
117 &b, // 运算式的 & 值
118 d_C, // C 在显存中的地址(结果矩阵)
119 M // ldc
122 // 同步函数
123 cudaThreadSynchronize();
125 // 从 显存 中取出运算结果至 内存中去
126 cublasGetVector(
127 M*M, // 要取出元素的个数
128 sizeof(float), // 每个元素大小
129 d_C, // GPU 端起始地址
130 1, // 连续元素之间的存储间隔
131 h_C, // 主机端起始地址
132 1 // 连续元素之间的存储间隔
135 // 打印运算结果
136 cout && "计算结果的转置 ( (A*B)的转置 ):" &&
138 for (int i = 0; i&M*M; i++){
139 cout && h_C[i] && " ";
140 if ((i + 1) % M == 0) cout &&
143 // 清理掉使用过的内存
144 free(h_A);
145 free(h_B);
146 free(h_C);
147 cudaFree(d_A);
148 cudaFree(d_B);
149 cudaFree(d_C);
151 // 释放 CUBLAS 库对象
152 cublasDestroy(handle);
154 getchar();
156 return 0;
cuda7.5测试由于想学习gpu并行运算提高计算效率,并且经过数次配置失败,最后终于成功了,于是决定把配置过程写下来,希望别人少走个坑,vs2013和cuda7.5配置主要参考了
二、电脑配置
电脑配置为Windows7 + VS2013+ NVIDIA GeForce GT 550M
三、安装cuda
进入cuda官网,下载新版cuda,我这里是7.5.18,正常安装即可,路径均为默认路径。默认安装在C盘。
四、配置环境变量
修改环境变量,安装完cuda7.5,系统会自动生成2个系统变量CUDA_PATH和CUDA_PATH_V7_5。
变量名:CUDA_PATH
变量值:C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v7.5
变量名:CUDA_PATH_V7_5
变量值:C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v7.5
&&&&&& 需要继续在系统变量添加
变量名:CUDA_SDK_PATH
变量值:C:\ProgramData\NVIDIACorporation\CUDA Samples\v7.5
变量名:CUDA_LIB_PATH
变量值:%CUDA_PATH%\lib\x64
变量名:CUDA_BIN_PATH
变量值:%CUDA_PATH%\bin
变量名:CUDA_SDK_BIN_PATH
变量值:%CUDA_SDK_PATH%\bin\x64
变量名:CUDA_SDK_LIB_PATH
变量值:%CUDA_SDK_PATH%\common\lib\x64
&&&&&& 最后在系统变量PATH的变量值后面添加:
;%CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_LIB_PATH%;%CUDA_SDK_BIN_PATH%;
五、安装最新显卡驱动
&&&&&& 去英伟达官网下载最新的显卡驱动,在设备管理器可看显卡驱动,我的是NVIDIA GeForce GT 550M,故下载
下载后默认路径安装即可
六、vs2013设置
打开VS2013并建立一个空的win32控制台项目
a.右键工程 -& 生成依赖项 -& 生成自定义,选择CUDA 7.5
b.右键项目 -& 属性 -& 配置属性 -& VC++目录,添加以下两个包含目录:
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5\include
C:\ProgramData\NVIDIA Corporation\CUDASamples\v7.5\common\inc
再添加以下两个库目录:
C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5\lib\x64
C:\ProgramData\NVIDIA Corporation\CUDASamples\v7.5\common\lib\x64
c.右键项目 -& 属性 -& 配置属性 -&链接器 -& 常规 -& 附加库目录,添加以下目录:
$(CUDA_PATH_V7_5)\lib\$(Platform)
d.右键项目 -& 属性 -& 配置属性 -&链接器 -& 输入 -& 附加依赖项,添加以下库:
其实就是& C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5\lib\x64 目录下的库
cublas.lib
cublas_device.lib
cudadevrt.lib
cudart.lib
cudart_static.lib
cufftw.lib
curand.lib
cusolver.lib
cusparse.lib
nvblas.lib
nvcuvid.lib
OpenCL.lib
e.打开配置管理器,将活动平台改为x64
右键源文件 -& 添加 -& 新建项,选择CUDA C++/C文件,创建main.cu
在main.cu中输入以下程序
//////////main.cu////////////////
#include &cuda_runtime.h&
#include &cublas_v2.h&
#include &time.h&
#include &iostream&
// 定义测试矩阵的维度
int const M = 5;
int const N = 10;
int main()
// 定义状态变量
cublasStatus_
// 在 内存 中为将要计算的矩阵开辟空间
float *h_A = (float*)malloc(N*M*sizeof(float));
float *h_B = (float*)malloc(N*M*sizeof(float));
// 在 内存 中为将要存放运算结果的矩阵开辟空间
float *h_C = (float*)malloc(M*M*sizeof(float));
// 为待运算矩阵的元素赋予 0-10 范围内的随机数
for (int i = 0; i&N*M; i++) {
h_A[i] = (float)(rand() % 10 + 1);
h_B[i] = (float)(rand() % 10 + 1);
// 打印待测试的矩阵
cout && &矩阵 A :& &&
for (int i = 0; i&N*M; i++){
cout && h_A[i] && & &;
if ((i + 1) % N == 0) cout &&
cout && &矩阵 B :& &&
for (int i = 0; i&N*M; i++){
cout && h_B[i] && & &;
if ((i + 1) % M == 0) cout &&
** GPU 计算矩阵相乘
// 创建并初始化 CUBLAS 库对象
cublasHandle_
status = cublasCreate(&handle);
if (status != CUBLAS_STATUS_SUCCESS)
if (status == CUBLAS_STATUS_NOT_INITIALIZED) {
cout && &CUBLAS 对象实例化出错& &&
getchar();
return EXIT_FAILURE;
float *d_A, *d_B, *d_C;
// 在 显存 中为将要计算的矩阵开辟空间
cudaMalloc(
(void**)&d_A,
// 指向开辟的空间的指针
N*M * sizeof(float)
// 需要开辟空间的字节数
cudaMalloc(
(void**)&d_B,
N*M * sizeof(float)
// 在 显存 中为将要存放运算结果的矩阵开辟空间
cudaMalloc(
(void**)&d_C,
M*M * sizeof(float)
// 将矩阵数据传递进 显存 中已经开辟好了的空间
cublasSetVector(
// 要存入显存的元素个数
sizeof(float),
// 每个元素大小
// 主机端起始地址
// 连续元素之间的存储间隔
// GPU 端起始地址
// 连续元素之间的存储间隔
cublasSetVector(
sizeof(float),
// 同步函数
cudaThreadSynchronize();
// 传递进矩阵相乘函数中的参数,具体含义请参考函数手册。
float a = 1; float b = 0;
// 矩阵相乘。该函数必然将数组解析成列优先数组
cublasSgemm(
// blas 库对象
CUBLAS_OP_T,
// 矩阵 A 属性参数
CUBLAS_OP_T,
// 矩阵 B 属性参数
// A, C 的行数
// B, C 的列数
// A 的列数和 B 的行数
// 运算式的 α 值
// A 在显存中的地址
// B 在显存中的地址
// 运算式的 β 值
// C 在显存中的地址(结果矩阵)
// 同步函数
cudaThreadSynchronize();
// 从 显存 中取出运算结果至 内存中去
cublasGetVector(
要取出元素的个数
sizeof(float),
// 每个元素大小
// GPU 端起始地址
// 连续元素之间的存储间隔
// 主机端起始地址
// 连续元素之间的存储间隔
// 打印运算结果
cout && &计算结果的转置 ( (A*B)的转置 ):& &&
for (int i = 0; i&M*M; i++){
cout && h_C[i] && & &;
if ((i + 1) % M == 0) cout &&
// 清理掉使用过的内存
free(h_A);
free(h_B);
free(h_C);
cudaFree(d_A);
cudaFree(d_B);
cudaFree(d_C);
// 释放 CUBLAS 库对象
cublasDestroy(handle);
getchar();
如果成功使用gpu函数,则可获得结果如下
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:32142次
排名:千里之外
原创:39篇
评论:27条
(5)(1)(6)(4)(2)(3)(1)(4)(2)(3)(1)(1)(1)(1)(6)折腾了几天,终于在windows系统上成功配置了Caffe环境,期间遇到了很多问题,每个问题的解决也都花了不少时间,查过挺多资料,感觉挺有意义,这里写篇博客记录一下。
原来我使用的CUDA版本是7.5,参照&辛辛苦苦编译生成了caffe.exe,愣高兴了一晚,结果当我用caffe对手写字体库mnist进行训练时,悲剧了!运行时出现
CUDA driver version is insufficient for CUDA runtime version.
意思就是你的显卡驱动版本与CUDA的版本不匹配,直接一点就是你的显卡太辣鸡了!不适合这么高版本的CUDA。
我一看,完了,太冲动了,辛辛苦苦编译完caffe.exe,还没能用上,就出现致命的问题!第一时间就是想着怎么补救,将问题抛给百度,顺道爬墙去了google,给的答案基本都是将显卡驱动升级至最高版本或者是卸载CUDA7.5,或一个与你的显卡驱动能匹配的CUDA版本。我自己的电脑,我是知道的,用着学校实验室批发回来的电脑,显卡肯定是不行的,而且驱动已经是最新版本。想到这,我又开始怀疑,可能我电脑的显卡根本就不支持CUDA。越想越着急,我下定决心要把这件事弄清楚!下面正式开始!
一、VS2013的安装
现在visual Studio已经免费了,微软真的是体恤中国的科研人士,致敬!安装在这里就不多提了,官网上下载就好,还有中文版的-。-
二、Opencv2.4.10的安装
开源计算机视觉库,现在已经更新到3.0了,我比较传统,还在使用2.4.10,下载和安装也不多提了-。-
三、CUDA的安装
&首先最重要的一点是,你得确认你的显卡是否支持CUDA。CUDA是NVIDIA厂商推出的运算平台,如果显卡厂商不是NVIDIA,那么,我&不负责任&地说,CUDA不适合你的电脑,到别处玩沙去吧!(或许已经有其它厂商制造的显卡支持CUDA了,但绝大部分,都不支持)。如果你的显卡是N卡,也没急着偷笑,因为太老的N卡也是要去边上玩沙的。
我的机器的基本配置:
处理器 intel i3-2120
显卡&NVIDIA GeForce 405 OEM  512MB
系统 Windows7 64bit
配置很差吧,我都懒得港-。-!
首先可以在的官方网站查看显卡是否在支持的列表中。下面我截了两幅图,为了图文并茂而已,而且也只是部分。
我在这上面没查到我的GeForce 405,心想完了,科研举步维艰啊!后来又想,可能我这个显卡年代过于久远,人家懒得在列表里列出来,况且您好我截了两张图都还没列全呢!后来我不断查资料时,发现有博主说,上面那个表不是特别全,然后给了一个NVIDA的硬件设备网站,说是可以在上面查看是否支持!就是这个链接&&&
还有的说法是说也可以查看是否支持,
不过听说这个软件有时会失准,所以最好还是查看硬件的支持信息。
&看来我的显卡还是支持CUDA的,接下来就要选一个合适版本的CUDA了。那怎么知道我的显卡支持的CUDA最高版本是哪一个呀?为此我又百度了很久,终于功夫不负有心人,在一个论坛的网友提问中找到了答案。
有时真的是感慨互联网搜索功能之强大!你遇到的问题,基本上都会有人遇到过并解决!
于是乎,我就打开了NVIDIA控制面板,找到了NVCUDA.DLL信息显示栏,截图如下:
看来我的显卡支持的CUDA最高版本只到6.5,现在都出到8.0了,再次感慨电脑配置之差!
下载了正确的CUDA版本,安装便是,在这里提醒两点:
1、不要选择精简模式安装,而是全部安装,因为选择精简安装后,SDK包是默认不安装的,但是实际使用时,是要用到SDK中的内容的。
2、在安装过程中,提示:"This graphics driver could not find compatible graphics hardware....",一定不要点&继续&,如果点了,后续你就会遇到开头我说的那种问题,所以,一定慎重!
CUDA driver version is insufficient for CUDA runtime version.
所以安装CUDA之前,一定一定要确定好你的显卡支持的最高版本,尤其是那些显卡老旧的人(最新换的显卡就无所谓啦,装个最高版本的,妥妥的!)
验证CUDA是否安装完成并能使用
&安装完之后,得确认是否安装正确,打开命令提示框cmd,输入命令&nvcc -V&,如果安装正确,会显示下面的结果:
显示CUDA的版本是V6.5.13。
当然,这只是表明你安装CUDA正确,但并不表示能用,要验证是否能用,还需使用到CUDA提供的例子。
1、在例子的安装目录下,找到解决方案的名字。比如我的例子的安装路径是
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v6.5
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v6.5\1_Utilities
下,找到bandwidthTest文件夹下的bandwidthTest_vs2013.sln&,有几个不同版本的解决方案,我使用的是vs2013,所以选择这个。
2、开始编译,运行生成控制台程序如下:
看到Result=PASS 就可以安心了。
还有一个例子是deviceQuery文件夹下的deviceQuery_vs2013.sln&,编译后运行的结果如下:
同样,看到Result=PASS 就可以放心了!
到这里,CUDA确定是可用了,可以起身抽支烟放松放松~
四、caffe环境的配置
我配了几次caffe环境,每次都是参照这个博文里的步骤配置的
虽然使用的是CUDA7.5,但步骤是一致的,参考的时候注意路径、环境变量、依赖库、包含目录、库目录等问题即可!
遇到的问题:
1、出现&应用程序无法正常启动(0xc000007b)&
可能是因为:
a.需要把./3rdparty/bin的路径加入到系统环境变量Path中;
b.之前使用的opencv是win32位的,而caffe使用的Release是64位配置的,因此在环境变量中既要配x86的opencv的vc12\bin,也要有x64的vc12\bin。
2、在使用CUDA6.5版本生成解决方案后,编译时,出现:
【conv_layer.cu】 错误 78 error: too few arguments in function call
点击这个错误,定位到错误行
在某论坛上看到的解决方法是在最后加入第四个参数&false&,即更改为
重新编译后,该错误消失。
3、在使用CUDA6.5版本编译时,遇到了一个问题:
CUDA fatal error "Invalid device function "
出现这个问题,说明你的gpu超荷载了,你得查查自己的gpu的计算能力,怎么查呢?我用的是GPU-Z查看的,
&我的gpu的计算能力为1.2(极低!),但我参照博客配置时,在code Generation中使用的是compute_20,sm_20,所以一直出错,后来按照自己的计算能力,更改一下就编译通过了!
另外我想补充的是以下几点:
1、CUDA的用处:目前随着硬件技术的进步,常使用GPU(Graphics Processing Unit,图形处理器)来进行神经网络算法的训练及实现。GPU计算的基础是Nvidia的CUDA环境。
2、Caffe的主版本(caffe-master)只支持Linux,所以要下载专门的caffe windows版本。
3、Caffe的编译需要第三方库的支持,3rdparty即为所需的第三方库,通常包括了:
  a.boost函数库,下载地址是&,下载需要的版本库。
  b.Opencv开源计算机视觉库,到官网下载就好。
  c.OpenBlas,是一个高性能的多核BLAS(Basic Linear Algebra Subprograms,基础线性代数子程序库),下载地址是&,注意要下载64位的window版本。
  d.glog是google的开源API,但是google是上不去的,FQ吧-。-
  e.levelldb,也是谷歌的开源库,下载地址也在google上,不过这里有个链接可以直接下载
  f.protobuf,也是谷歌的开源库,下载地址也在google上,在百度云找到一个版本
参考博客:
1、&(【检查显卡】参照内容)
2、&(【安装CUDA】参照内容)
3、(【配置caffe环境】参照内容)
4、(【遇到的问题之2】参照内容)
5、&(【遇到的问题之3】参照内容)
阅读(...) 评论()4743人阅读
& & & &最近有了新的电脑,配置是GTX1070的显卡,因此想要配置CUDA。根据官方的说明,CUDA8.0比较适合GTX1070的显卡。在网上查了,几乎没有用Windows配置CUDA8.0的博客,无奈只能自己摸索。
& & & &我使用的是VS2013,win10,cuda8.0,GTX1070;
& & & &首先是到官网下载合适版本的cuda8.0,我今天用360浏览器和迅雷一直下载失败,后来用Microsoft Edge 浏览器成功下载;
& & & &然后安装下载后的文件(每一步我就不贴图了,反正是默认下一步就行);安装完成后就可以进行下面流程;
& & & 可以参考&,写的很详细,按照流程就没问题;
& & &双击C:\ProgramData\NVIDIA Corporation\CUDASamples\v8.0(文件夹是隐藏的,需设置显示隐藏)目录下的Samples_vs2013.sln打开Visual
Studio 2013进行编译,编译成功后就可以在
& & C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\bin\win64\Debug目录下面找到全部例子的可执行文件。需要说明的是个别例子编译失败,比如自己编译的时候成功135个,失败10个。失败的原因是缺乏相应的头
文件;失败也没有什么影响
& & 当完成编译和系统环境变量设置后,就可以建立自己的工程了,至此算是配置成功了;
& & 如何建立工程,以及工程里面的设置,以后在写。。。。。。(如有问题可以留言)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9064次
排名:千里之外
(1)(2)(1)(2)(1)(2)

我要回帖

更多关于 cuda自带的吗 的文章

 

随机推荐