前言

本文讲解如何在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 平台:

第十八步:样例测试

好了,至此平台已经完全搭建完毕,可用以下代码进行测试:

  1. // CUDA runtime 库 + CUBLAS 库
  2. #include "cuda_runtime.h"
  3. #include "cublas_v2.h"
  4.  
  5. #include <time.h>
  6. #include <iostream>
  7.  
  8. using namespace std;
  9.  
  10. // 定义测试矩阵的维度
  11. int const M = ;
  12. int const N = ;
  13.  
  14. int main()
  15. {
  16. // 定义状态变量
  17. cublasStatus_t status;
  18.  
  19. // 在 内存 中为将要计算的矩阵开辟空间
  20. float *h_A = (float*)malloc (N*M*sizeof(float));
  21. float *h_B = (float*)malloc (N*M*sizeof(float));
  22.  
  23. // 在 内存 中为将要存放运算结果的矩阵开辟空间
  24. float *h_C = (float*)malloc (M*M*sizeof(float));
  25.  
  26. // 为待运算矩阵的元素赋予 0-10 范围内的随机数
  27. for (int i=; i<N*M; i++) {
  28. h_A[i] = (float)(rand()%+);
  29. h_B[i] = (float)(rand()%+);
  30.  
  31. }
  32.  
  33. // 打印待测试的矩阵
  34. cout << "矩阵 A :" << endl;
  35. for (int i=; i<N*M; i++){
  36. cout << h_A[i] << " ";
  37. if ((i+)%N == ) cout << endl;
  38. }
  39. cout << endl;
  40. cout << "矩阵 B :" << endl;
  41. for (int i=; i<N*M; i++){
  42. cout << h_B[i] << " ";
  43. if ((i+)%M == ) cout << endl;
  44. }
  45. cout << endl;
  46.  
  47. /*
  48. ** GPU 计算矩阵相乘
  49. */
  50.  
  51. // 创建并初始化 CUBLAS 库对象
  52. cublasHandle_t handle;
  53. status = cublasCreate(&handle);
  54.  
  55. if (status != CUBLAS_STATUS_SUCCESS)
  56. {
  57. if (status == CUBLAS_STATUS_NOT_INITIALIZED) {
  58. cout << "CUBLAS 对象实例化出错" << endl;
  59. }
  60. getchar ();
  61. return EXIT_FAILURE;
  62. }
  63.  
  64. float *d_A, *d_B, *d_C;
  65. // 在 显存 中为将要计算的矩阵开辟空间
  66. cudaMalloc (
  67. (void**)&d_A, // 指向开辟的空间的指针
  68. N*M * sizeof(float) // 需要开辟空间的字节数
  69. );
  70. cudaMalloc (
  71. (void**)&d_B,
  72. N*M * sizeof(float)
  73. );
  74.  
  75. // 在 显存 中为将要存放运算结果的矩阵开辟空间
  76. cudaMalloc (
  77. (void**)&d_C,
  78. M*M * sizeof(float)
  79. );
  80.  
  81. // 将矩阵数据传递进 显存 中已经开辟好了的空间
  82. cublasSetVector (
  83. N*M, // 要存入显存的元素个数
  84. sizeof(float), // 每个元素大小
  85. h_A, // 主机端起始地址
  86. , // 连续元素之间的存储间隔
  87. d_A, // GPU 端起始地址
  88. // 连续元素之间的存储间隔
  89. );
  90. cublasSetVector (
  91. N*M,
  92. sizeof(float),
  93. h_B,
  94. ,
  95. d_B,
  96.  
  97. );
  98.  
  99. // 同步函数
  100. cudaThreadSynchronize();
  101.  
  102. // 传递进矩阵相乘函数中的参数,具体含义请参考函数手册。
  103. float a=; float b=;
  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
  120. );
  121.  
  122. // 同步函数
  123. cudaThreadSynchronize();
  124.  
  125. // 从 显存 中取出运算结果至 内存中去
  126. cublasGetVector (
  127. M*M, // 要取出元素的个数
  128. sizeof(float), // 每个元素大小
  129. d_C, // GPU 端起始地址
  130. , // 连续元素之间的存储间隔
  131. h_C, // 主机端起始地址
  132. // 连续元素之间的存储间隔
  133. );
  134.  
  135. // 打印运算结果
  136. cout << "计算结果的转置 ( (A*B)的转置 ):" << endl;
  137.  
  138. for (int i=;i<M*M; i++){
  139. cout << h_C[i] << " ";
  140. if ((i+)%M == ) cout << endl;
  141. }
  142.  
  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);
  150.  
  151. // 释放 CUBLAS 库对象
  152. cublasDestroy (handle);
  153.  
  154. getchar();
  155.  
  156. return ;
  157. }

运行结果

      

PS: 矩阵元素是随机生成的。

补充说明

  不论什么开发环境的搭建,都应该确保自己电脑的硬件配置,软件版本和参考文档的一致。这样才能确保最短的时间内完成搭建,进入到具体的开发环节。

第一篇:CUDA 6.0 安装及配置( WIN7 64位 / 英伟达G卡 / VS2010 )的更多相关文章

  1. Caffe + Ubuntu 15.04 + CUDA 7.0 安装以及配置

    作为小码农的我,昨天就在装这个东东了,主要参考第一篇博文,但是过程发现很多问题,经过反反复复,千锤百炼,终于柳暗花明,我把这个caffe给搞定了,是故,我发布出来,后之来者,欲将有感于斯文~ 本分分为 ...

  2. Keepalived + HAProxy 搭建【第一篇】HAProxy 的安装和配置

    第一步:准备 1. 操作系统 CentOS-7-x86_64-Everything-1511 2. 安装包 haproxy-1.7.2.tar.gz 第二步:安装 # tar zxvf haproxy ...

  3. Keepalived + HAProxy 搭建【第一篇】HAProxy 的安装与配置

    第一步:准备 1. 操作系统 CentOS-7-x86_64-Everything-1511 2. 安装包 haproxy-1.7.2.tar.gz 第二步:安装 # tar zxvf haproxy ...

  4. rabbitMQ第一篇:rabbitMQ的安装和配置

    在Windows下进行rabbitMQ的安装 第一步:软件安装 如果安装rabbitMQ首先安装基于erlang语言支持的OTP软件,然后在下载rabbitMQ软件进行安装(安装过程都是下一步,在此不 ...

  5. Gradle体验/第一篇:下装、安装、配置、体验

    http://jingyan.baidu.com/article/4d58d541167bc69dd4e9c009.html

  6. mysql免安装使用(win7 64位系统)

    一.解压 二.以管理员身份运行cmd 三.cmd命令进入到解压后的mysql文件bin目录下 四.将mysql服务添加到windows服务中.cmd在bin目录下输入:mysqld -install  ...

  7. Keepalived + HAProxy 搭建【第二篇】Keepalived 的安装与配置

    第一步:准备 1. 简介 本文搭建的是利用 Keepalived 实现 HAProxy 的热备方案,即两台主机上的 HAProxy 实例同时运行,其中全总较高的实例为 MASTER,MASTER出现异 ...

  8. Win7 64位系统,使用(IME)模式VS2010 编写 和 安装 输入法 教程(1)

    原文:Win7 64位系统,使用(IME)模式VS2010 编写 和 安装 输入法 教程(1) 首先感谢:http://blog.csdn.net/shuilan0066/article/detail ...

  9. win7+64位笔记本 python3.6安装opencv3

    1.直接在cmd窗口下用pip,输入 pip install opencv-python 安装成功是如下界面: 不放心还可以验证下,方法是cmd窗口下输入python,然后输入 import cv2 ...

随机推荐

  1. 安卓图表引擎AChartEngine(四) - 源码示例 嵌入Acitivity中的折线图

    前面几篇博客中都是调用ChartFactory.get***Intent()方法,本节讲的内容调用ChartFactory.get***View()方法,这个方法调用的结果可以嵌入到任何一个Activ ...

  2. [转]Axis2创建WebService实例

    以下文章来自http://clq9761.iteye.com/blog/976029,作者clq9761 一.Axis2的下载和安装 1.可从http://ws.apache.org/axis2/ 下 ...

  3. 深度学习框架Caffe的编译安装

    深度学习框架caffe特点,富有表达性.快速.模块化.下面介绍caffe如何在Ubuntu上编译安装. 1. 前提条件 安装依赖的软件包: CUDA 用来使用GPU模式计算. 建议使用 7.0 以上最 ...

  4. 做自己的串口调试工具-MFC

    之前一共说了几个软件库,串口通讯的,xml加载的,还有动态提示的,通过这三个库就可以实现一个自己的串口调试工具,成品如下 动态加载配置文件之后如下 软件可以在xml中配置发送的字符串,不算是大工程,但 ...

  5. JS实现标签页效果(配合css)不同标签下对应不同div

    显示页面tab.jsp </ div ></ body > </ html >   tab.css ul ,li { margin:0px; padding:0px ...

  6. DWR3.0框架入门(3) —— ScriptSession的维护及优化

    1.ScriptSession使用中存在的问题        在上一节实现了服务器的推送功能,但是根据 ScriptSession的生命周期我们可以得出以下几点的问题:   (1)ScriptSess ...

  7. webstorm 激活码

    WebStorm 2016 最新版激活(activation code方式) 注册时,在打开的License Activation窗口中选择“activation code”,在输入框输入下面的注册码 ...

  8. css3快速复习

    选择器边框.阴影 border-radius: 50%; 设置正圆形背景的改变CSS3重要的新东西: ● transition 过度,让一个元素从一个样式,变为另一个样式,不再是干蹦了,而是有动画,均 ...

  9. 中国产品众筹NO.1诞生

    中国产品众筹NO.1诞生 淘宝众筹打响新拐点之战 http://bbs.taobao.com/catalog/thread/508895-317240623.htm?spm=1.7274553.199 ...

  10. 关于浏览器和HTTP协议

    关于浏览器 浏览器的主要功能就是向服务器发出请求,在浏览器窗口中展示想要访问的网络资源.这里资源一般是指 HTML 文档,图片等其他的类型.资源的位置由用户使用 URL(统一资源标示符)指定. 而浏览 ...