Windows下caffe的GPU配置:VS2013+cuda7.5+cudnn v5+python+matlab(一)

来源:互联网 发布:notepad 和python 编辑:程序博客网 时间:2024/05/18 01:25

VS2013与cuda7.5的配置

一、准备工作

1、下载CUDA7.5并安装https://www.techspot.com/downloads/4995-nvidia-cuda-toolkit.html
我自己的安装在C:\Program Files\NVIDIA GPU Computing Toolkit。(最好安装在C盘,以防出问题)点击.exe文件,直接安装在C盘下面。

2、安装cuDNN v5,cuDNN需要申请才能下载,这里我提供网址给大家https://developer.nvidia.com/cudnn 下载后如下图(这里的系统是win10-64位的,一般使用v5版本,7.5表示匹配的cuda的版本号,注意,一定要与系统及版本号匹配才行):

14

将cuDNN解压后,我自己的解压在E盘。将cuDNN解压后,cuDNN中有bin、include、lib文件夹,要把文件夹中的东西提取出来,(把cuDNN中有bin、include、lib文件夹中的内容分别复制粘贴)放进cuda的bin、include、lib文件夹中,我的cuda路径在 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5 。

3、安装vs2013,小菜一直在用vs2013,感觉挺好用的,可视化做得很好(不是做广告)。这里注意vs2013的安装最好安装在默认的C盘位置。我这里是安装在C:\Program Files (x86)\Microsoft Visual Studio 12.0。这里有一个问题,因为我以前一直用的是vs2012版本,就先装了cuda7.5,后面才安装的vs2013,后面使用的时候就出现了很多的问题。后来发现是cuda7.5没有对vs2013进行配置,也对嘛,先装cuda再装2013,怎么给你配置嘛。解决方案就是重新安装cuda7.5,这里需要注意cuda挺好,不用卸载老的版本,新版本的安装会自己给你卸载老版本。并且最后会对你现在安装的所有版本的vs都进行配置。(VS2013需要配置CUDA7.5)

二、配置环境变量

cuda7.5安装完成之后在系统环境变量中自动配置了两个系统变量

CUDA_PATH = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5CUDA_PATH_V7_5 = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5

但是为了之后的vs2013的配置做准备我们需要在配置五个系统变量

CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5CUDA_LIB_PATH = %CUDA_PATH%\lib\x64CUDA_BIN_PATH = %CUDA_PATH%\binCUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64

然后,在系统变量 PATH 的末尾添加:

;%CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_LIB_PATH%;%CUDA_SDK_BIN_PATH%;

备注:ProgramData为隐藏目录,要设置为显示。
programdata是电脑C盘的一个系统文件夹。建议不要删除,隐藏即可!C:\ProgramData 是个公用的被创建文件夹或文件存放的地方,这些文件夹或文件仅由创建者完整控制。打开ProgramData,可以看到很多和应用软件同名的文件夹,里面有一些软件运行,或者修复卸载时候调用的一些文件,生成的一些记录也存放在这里。默认是隐藏的,不可删除的,隐藏它即可。
重启计算机使得环境变量生效。

三、测试Samples

进入cmd,输入nvcc –V(-)命令,如图所示

1

表示cuda安装成功,
再进入SDK实例安装目录C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5(默认文件夹隐藏,需要显示出来)
点击Samples_vs2013.sln文件打开vs2013执行
如果这时候出现

2

此时,是未找到CUDA 7.5.props,将C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5\extras\visual_studio_integration\MSBuildExtensions下的文件复制到C:\Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations目录下,重启VS2013即可。
点击生成 — 解决方案,这时候在来运行Samples_vs2013.sln文件就会出现如图所示

3

表明测试成功!

四、VS2013 + CUDA7.5配置

1.打开vs2013并创建一个空win32程序,创建一个cuda_samples的解决方案和cuda_test1项目:

4

2.右键源文件–>添加–>新建项,如下图所示:

5

3.选择NIVIDIA CUDA7.5中 CUDA C/C++file,并在名称那填上cuda_main

6

7

4.选择cuda_test1,点击右键–>项目依赖项–>自定义生成

8

5.选择CUDA7.5

9

6.点击cuda_main.cu的属性

10

7.在配置属性–>常规–>项类型–>选择“CUDA C/C++”

11

8.1 项目配置
8.1.1 x64
8.1.1.1 包含目录配置
右键点击项目属性–>属性–>配置属性–>VC++目录–>包含目录

12

添加包含目录:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5\common\inc
$(CUDA_PATH)\include(跟上面两个一起复制进包含目录里)

8.1.1.2 库目录配置
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)\lib\x64(跟上面两个一起复制进库目录里)

8.1.1.3 依赖项
配置属性–>连接器–>输入–>附加依赖项
添加库文件:

cublas.libcublas_device.libcuda.libcudadevrt.libcudart.libcudart_static.libcufft.libcufftw.libcurand.libcusolver.libcusparse.libnppc.libnppi.libnpps.libnvblas.libnvcuvid.libnvrtc.libOpenCL.libcudnn.libcudnn_static.lib(这个是cuDnn v4版本中的,用v5的没有这个)

就是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64目录下的库。

8.1.2 x86(win32)
8.1.2.1 包含目录配置
右键点击项目属性–>属性–>配置属性–>VC++目录–>包含目录
添加包含目录:
$(CUDA_PATH)\include

8.1.2.2 库目录配置
VC++目录–>库目录
添加库目录:
$(CUDA_PATH)\lib\Win32

8.1.2.3 依赖项
配置属性–>连接器–>输入–>附加依赖项
添加库文件:

cuda.lib cudadevrt.lib cudart.lib cudart_static.lib nvcuvid.lib OpenCL.lib`

备注: win32和x64位的lib库有差别,配置时需注意,除了上述添加的lib文件外,x64还有其他的lib库文件,如cublas.lib,如运行1.6的样例时,要添加这个库,不然会编译失败。(x64平台和win32平台都要配置,完成后在x64平台中生成)

8.2样例

// CUDA runtime 库 + CUBLAS 库 #include "cuda_runtime.h" #include "cublas_v2.h" #include <time.h> #include <iostream> using namespace std;// 定义测试矩阵的维度 int const M = 5;int const N = 10;int main(){// 定义状态变量 cublasStatus_t status; // 在内存中为将要计算的矩阵开辟空间 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 :" << endl;for (int i = 0; i<N*M; i++){    cout << h_A[i] << " ";    if ((i + 1) % N == 0) cout << endl;}cout << endl;cout << "矩阵 B :" << endl;for (int i = 0; i<N*M; i++){    cout << h_B[i] << " ";    if ((i + 1) % M == 0) cout << endl;}cout << endl;/*    ** GPU 计算矩阵相乘    */// 创建并初始化 CUBLAS 库对象cublasHandle_t handle;status = cublasCreate(&handle);if (status != CUBLAS_STATUS_SUCCESS){    if (status == CUBLAS_STATUS_NOT_INITIALIZED) {        cout << "CUBLAS 对象实例化出错" << endl;    }    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(    N*M, // 要存入显存的元素个数     sizeof(float), // 每个元素大小     h_A, // 主机端起始地址     1, // 连续元素之间的存储间隔     d_A, // GPU 端起始地址     1 // 连续元素之间的存储间隔     );cublasSetVector(    N*M,    sizeof(float),    h_B,    1,    d_B,    1    );// 同步函数cudaThreadSynchronize();// 传递进矩阵相乘函数中的参数,具体含义请参考函数手册。 float a = 1; float b = 0;// 矩阵相乘。该函数必然将数组解析成列优先数组 cublasSgemm(    handle, // blas 库对象     CUBLAS_OP_T, // 矩阵 A 属性参数     CUBLAS_OP_T, // 矩阵 B 属性参数    M, // A, C 的行数     M, // B, C 的列数    N, // A 的列数和 B 的行数    &a, // 运算式的 α 值     d_A, // A 在显存中的地址     N, // lda     d_B, // B 在显存中的地址     M, // ldb     &b, // 运算式的 β 值     d_C, // C 在显存中的地址(结果矩阵)     M //     );// 同步函数 cudaThreadSynchronize();// 从 显存 中取出运算结果至 内存中去cublasGetVector(M*M, // 要取出元素的个数     sizeof(float), // 每个元素大小     d_C, // GPU 端起始地址     1, // 连续元素之间的存储间隔     h_C, // 主机端起始地址    1 // 连续元素之间的存储间隔     );// 打印运算结果 cout << "计算结果的转置 ( (A*B)的转置 ):" << endl;for (int i = 0; i<M*M; i++){    cout << h_C[i] << " ";    if ((i + 1) % M == 0) cout << endl;}// 清理掉使用过的内存 free(h_A);free(h_B);free(h_C);cudaFree(d_A);cudaFree(d_B);cudaFree(d_C);// 释放 CUBLAS 库对象cublasDestroy(handle);getchar();return 0;}

运行结果如下图所示:

13

试着执行E:\VS2013bianxiedaima\cuda_samples下面的cuda_samples例子,如出现错误:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\nvvm\bin\cicc.exe : IO error : Error opening output file 'C:/Users/***(用户名)/AppData/Local/Temp/tmpxft_00002f8c_00000000-4_sample.ptx': 在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符。1>  sample.cu1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 7.5.targets(604,9): error MSB3721: 命令“"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\bin\nvcc.exe" -gencode=arch=compute_20,code=\"sm_20,compute_20\" --use-local-env --cl-version 2010 -ccbin "f:\Visual Studio 2010\VC\bin\x86_amd64"  -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include"  -G   --keep-dir x64\Debug -maxrregcount=0  --machine 64 --compile -cudart static  -g   -DWIN32 -D_DEBUG -D_CONSOLE -D_UNICODE -DUNICODE -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd " -o x64\Debug\sample.cu.obj "G:\cuda_sample\cuda_sample\sample.cu"”已退出,返回代码为 1。1> 

原因是你的路径中含有非法字符,是C:/Users/***(用户名)/AppData/Local/Temp/tmpxft_00002f8c_00000000-4_sample.ptx有中文名造成的,因为你的用户名是***,为中文名,你可以换一个账户名,不要含有中文和空格等,然后再编译下就能成功了。
更换账户名:计算机———打开控制面板———-用户账户和家庭安全————–用户账户————-添加或删除用户账户—————创建一个新账户——–点进去选择标准用户,起个英文名,点击创建用户,即完成了新用户的创建

14

15

若要更改用户名,则按如下:
双击要更改的用户名进入—————–更改账户名称—————-输入新账户名称,确认即可:

16

17

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 桃金娘泡酒有什么功效 三七泡酒的配方 海马枸杞泡酒配方 红枣枸杞泡酒配方 枸杞泡酒的比例 养生泡酒药材配方 黑枸杞泡酒配方 中药泡酒配方大全 枸杞泡酒配方 药材泡酒配方 海马泡酒配方 小老鼠泡酒有什么功效 枸杞红枣泡酒 泡酒料配方表 蝎子泡酒有什么功效 海马泡酒加什么药材 经典的水果泡酒配方 泡酒蛇20年咬人事件 蝎子泡酒的配方 雪莲花泡酒功效与作用 泡酒用什么酒 蛇泡酒的功效 什么泡酒好喝又有营养 黄芪泡酒配方 水果泡酒大全 枸杞泡酒的功效与作用 樱桃泡酒有什么功效 大枣枸杞泡酒 西洋参泡酒配方 苟杞泡酒的功效与作用 黑枸杞泡酒的功效 枸杞可以泡酒喝吗 红枣枸杞泡酒喝的功效 枸杞泡酒多长时间可以喝 枸杞泡酒有什么功效 枸杞能泡酒吗 枸杞泡酒的方法 枸杞泡酒有什么好处 泡酒配方500例大 灵芝和什么泡酒好 黄精泡酒配方