第一篇:CUDA 6.0 安装及配置( WIN7 64位 / 英伟达G卡 / VS2010 )
前言
本文讲解如何在VS 2010开发平台中搭建CUDA开发环境。
当前配置:
系统:WIN7 64位
开发平台:VS 2010
显卡:英伟达G卡
CUDA版本:6.0
若配置不同,请谨慎参考本文。
第一步:下载CUDA
点击这里下载 cuda最新版。得到类似:
cuda_6.0.37_winvista_win7_win8.1_general_64.exe
类型的安装包。
第二步:设置安装路径
运行安装程序,弹出安装过程中转文件路径设定框:
这个路径随便填无所谓,安装完后就会自动删除的,我就直接设置为默认的。
第三步:检测安装环境
等待系统帮你检测当前平台是否适合搭建CUDA:
第四步:许可声明
检测完毕后,正式进入CUDA安装界面:
同意并继续。
第五步:选择安装模式
然后选择安装模式:
为了完全安装所有功能,选择自定义模式安装。
第六步:勾选组件
接下来勾选要安装的组件:
全部勾上。
第七步:设置安装路径
接下来要设置三个安装路径:
这三个路径安装的是什么在日后的文章中将会解释,目前先不理会,直接安装到默认路径。点击下一步之后开始正式安装。
第八步:配置环境变量
安装完毕后,可以看到系统中多了CUDA_PATH和CUDA_PATH_V6_0两个环境变量,接下来,还要在系统中添加以下几个环境变量:
CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v6.0
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%;
第九步:重启计算机
重新启动计算机以使环境变量生效。
第十步:启动Visual studio项目
打开VS2010并建立一个空的win32控制台项目:
附加选项那里请把“空项目”打钩:
第十一步:添加CUDA文件类型
右键源文件 -> 添加 -> 新建项 如下图所示:
在打开的对话框中选择新建一个CUDA格式的源文件 (如果你只是要调用 CUDA 库编写程序而不需要自行调用核函数分配块、线程的话也可以就建立 .cpp 的源文件):
第十二步:配置生成属性
右键工程 -> 生成自定义 如下图所示:
在弹出的对话框中勾选“CUDA 6.0 *****"选项:
第十三步:配置基本库目录
右键项目 -> 属性 -> 配置属性 -> VC++目录,添加以下两个包含目录:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\include
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v6.0\common\inc
再添加以下两个库目录:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\lib\x64
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v6.0\common\lib\x64
第十四步:配置CUDA静态链接库路径
右键项目 -> 属性 -> 配置属性 ->连接器 -> 常规 -> 附加库目录,添加以下目录:
$(CUDA_PATH_V6_0)\lib\$(Platform)
如下图所示:
第十五步:选用CUDA静态链接库
右键项目 -> 属性 -> 配置属性 ->连接器 -> 输入 -> 附加依赖项,添加以下库:
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 (32位系统请勿附加此库!)
nvcuvenc.lib
nvcuvid.lib
OpenCL.lib
如下图所示:
第十六步:配置源码文件风格
右键项目 -> 属性,如下图所示:
将项类型设置为 CUDA C/C++:
第十七步:调整配置管理器平台类型
打开配置管理器,如下图所示:
点击 新建,如下图所示:
选择 X64 平台:
第十八步:样例测试
好了,至此平台已经完全搭建完毕,可用以下代码进行测试:
- // CUDA runtime 库 + CUBLAS 库
- #include "cuda_runtime.h"
- #include "cublas_v2.h"
- #include <time.h>
- #include <iostream>
- using namespace std;
- // 定义测试矩阵的维度
- int const M = ;
- int const N = ;
- 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=; i<N*M; i++) {
- h_A[i] = (float)(rand()%+);
- h_B[i] = (float)(rand()%+);
- }
- // 打印待测试的矩阵
- cout << "矩阵 A :" << endl;
- for (int i=; i<N*M; i++){
- cout << h_A[i] << " ";
- if ((i+)%N == ) cout << endl;
- }
- cout << endl;
- cout << "矩阵 B :" << endl;
- for (int i=; i<N*M; i++){
- cout << h_B[i] << " ";
- if ((i+)%M == ) 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, // 主机端起始地址
- , // 连续元素之间的存储间隔
- d_A, // GPU 端起始地址
- // 连续元素之间的存储间隔
- );
- cublasSetVector (
- N*M,
- sizeof(float),
- h_B,
- ,
- d_B,
- );
- // 同步函数
- cudaThreadSynchronize();
- // 传递进矩阵相乘函数中的参数,具体含义请参考函数手册。
- float a=; float b=;
- // 矩阵相乘。该函数必然将数组解析成列优先数组
- 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 // ldc
- );
- // 同步函数
- cudaThreadSynchronize();
- // 从 显存 中取出运算结果至 内存中去
- cublasGetVector (
- M*M, // 要取出元素的个数
- sizeof(float), // 每个元素大小
- d_C, // GPU 端起始地址
- , // 连续元素之间的存储间隔
- h_C, // 主机端起始地址
- // 连续元素之间的存储间隔
- );
- // 打印运算结果
- cout << "计算结果的转置 ( (A*B)的转置 ):" << endl;
- for (int i=;i<M*M; i++){
- cout << h_C[i] << " ";
- if ((i+)%M == ) 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 ;
- }
运行结果
PS: 矩阵元素是随机生成的。
补充说明
不论什么开发环境的搭建,都应该确保自己电脑的硬件配置,软件版本和参考文档的一致。这样才能确保最短的时间内完成搭建,进入到具体的开发环节。
第一篇:CUDA 6.0 安装及配置( WIN7 64位 / 英伟达G卡 / VS2010 )的更多相关文章
- Caffe + Ubuntu 15.04 + CUDA 7.0 安装以及配置
作为小码农的我,昨天就在装这个东东了,主要参考第一篇博文,但是过程发现很多问题,经过反反复复,千锤百炼,终于柳暗花明,我把这个caffe给搞定了,是故,我发布出来,后之来者,欲将有感于斯文~ 本分分为 ...
- Keepalived + HAProxy 搭建【第一篇】HAProxy 的安装和配置
第一步:准备 1. 操作系统 CentOS-7-x86_64-Everything-1511 2. 安装包 haproxy-1.7.2.tar.gz 第二步:安装 # tar zxvf haproxy ...
- Keepalived + HAProxy 搭建【第一篇】HAProxy 的安装与配置
第一步:准备 1. 操作系统 CentOS-7-x86_64-Everything-1511 2. 安装包 haproxy-1.7.2.tar.gz 第二步:安装 # tar zxvf haproxy ...
- rabbitMQ第一篇:rabbitMQ的安装和配置
在Windows下进行rabbitMQ的安装 第一步:软件安装 如果安装rabbitMQ首先安装基于erlang语言支持的OTP软件,然后在下载rabbitMQ软件进行安装(安装过程都是下一步,在此不 ...
- Gradle体验/第一篇:下装、安装、配置、体验
http://jingyan.baidu.com/article/4d58d541167bc69dd4e9c009.html
- mysql免安装使用(win7 64位系统)
一.解压 二.以管理员身份运行cmd 三.cmd命令进入到解压后的mysql文件bin目录下 四.将mysql服务添加到windows服务中.cmd在bin目录下输入:mysqld -install ...
- Keepalived + HAProxy 搭建【第二篇】Keepalived 的安装与配置
第一步:准备 1. 简介 本文搭建的是利用 Keepalived 实现 HAProxy 的热备方案,即两台主机上的 HAProxy 实例同时运行,其中全总较高的实例为 MASTER,MASTER出现异 ...
- Win7 64位系统,使用(IME)模式VS2010 编写 和 安装 输入法 教程(1)
原文:Win7 64位系统,使用(IME)模式VS2010 编写 和 安装 输入法 教程(1) 首先感谢:http://blog.csdn.net/shuilan0066/article/detail ...
- win7+64位笔记本 python3.6安装opencv3
1.直接在cmd窗口下用pip,输入 pip install opencv-python 安装成功是如下界面: 不放心还可以验证下,方法是cmd窗口下输入python,然后输入 import cv2 ...
随机推荐
- 安卓图表引擎AChartEngine(四) - 源码示例 嵌入Acitivity中的折线图
前面几篇博客中都是调用ChartFactory.get***Intent()方法,本节讲的内容调用ChartFactory.get***View()方法,这个方法调用的结果可以嵌入到任何一个Activ ...
- [转]Axis2创建WebService实例
以下文章来自http://clq9761.iteye.com/blog/976029,作者clq9761 一.Axis2的下载和安装 1.可从http://ws.apache.org/axis2/ 下 ...
- 深度学习框架Caffe的编译安装
深度学习框架caffe特点,富有表达性.快速.模块化.下面介绍caffe如何在Ubuntu上编译安装. 1. 前提条件 安装依赖的软件包: CUDA 用来使用GPU模式计算. 建议使用 7.0 以上最 ...
- 做自己的串口调试工具-MFC
之前一共说了几个软件库,串口通讯的,xml加载的,还有动态提示的,通过这三个库就可以实现一个自己的串口调试工具,成品如下 动态加载配置文件之后如下 软件可以在xml中配置发送的字符串,不算是大工程,但 ...
- JS实现标签页效果(配合css)不同标签下对应不同div
显示页面tab.jsp </ div ></ body > </ html > tab.css ul ,li { margin:0px; padding:0px ...
- DWR3.0框架入门(3) —— ScriptSession的维护及优化
1.ScriptSession使用中存在的问题 在上一节实现了服务器的推送功能,但是根据 ScriptSession的生命周期我们可以得出以下几点的问题: (1)ScriptSess ...
- webstorm 激活码
WebStorm 2016 最新版激活(activation code方式) 注册时,在打开的License Activation窗口中选择“activation code”,在输入框输入下面的注册码 ...
- css3快速复习
选择器边框.阴影 border-radius: 50%; 设置正圆形背景的改变CSS3重要的新东西: ● transition 过度,让一个元素从一个样式,变为另一个样式,不再是干蹦了,而是有动画,均 ...
- 中国产品众筹NO.1诞生
中国产品众筹NO.1诞生 淘宝众筹打响新拐点之战 http://bbs.taobao.com/catalog/thread/508895-317240623.htm?spm=1.7274553.199 ...
- 关于浏览器和HTTP协议
关于浏览器 浏览器的主要功能就是向服务器发出请求,在浏览器窗口中展示想要访问的网络资源.这里资源一般是指 HTML 文档,图片等其他的类型.资源的位置由用户使用 URL(统一资源标示符)指定. 而浏览 ...