windows+VS2013+CUDA7.5配置

本文转自VS2013+CUDA7.5配置,修正了其中步骤f的误记,完善了测试阶段的说明。


电脑配置:

    系统:WIN7 64位

    开发平台:VS 2013

    显卡:英伟达G卡

    CUDA版本:7.5

1.安装最新版CUDA
   https://developer.nvidia.com/cuda-downloads
   默认安装在C盘

2.配置环境变量
      
        CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\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%;
        备注:ProgramData为隐藏目录,要设置为显示

3.打开VS2013并建立一个空的win32控制台项目
   a.右键源文件 -> 添加 -> 新建项  选择CUDA C++/C文件
   b.右键工程 -> 生成自定义,选择CUDA 7.5
   c.右键项目 -> 属性 -> 配置属性 -> VC++目录,添加以下两个包含目录:
        C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include
     C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5\common\inc
  再添加以下两个库目录:
  C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64
  C:\ProgramData\NVIDIA Corporation\CUDA Samples\v7.5\common\lib\x64
   d.右键项目 -> 属性 -> 配置属性 ->链接器 -> 常规 -> 附加库目录,添加以下目录:
  $(CUDA_PATH_V7_5)\lib\$(Platform)
   e.右键项目 -> 属性 -> 配置属性 ->链接器 -> 输入 -> 附加依赖项,添加以下库:
       其实就是  C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64 目录下的库
       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
   f.右键点击.cu文件 -> 属性->项类型  选CUDA C/C++

   g.打开配置管理器
       
       平台改为x64

    4.测试
将下面代码复制到你的cu文件中。
      
   
[cpp]  view plain  copy
  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 = 5;  
  12. int const N = 10;  
  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=0; i<N*M; i++) {  
  28.         h_A[i] = (float)(rand()%10+1);  
  29.         h_B[i] = (float)(rand()%10+1);  
  30.       
  31.     }  
  32.       
  33.     // 打印待测试的矩阵  
  34.     cout << "矩阵 A :" << endl;  
  35.     for (int i=0; i<N*M; i++){  
  36.         cout << h_A[i] << " ";  
  37.         if ((i+1)%N == 0) cout << endl;  
  38.     }  
  39.     cout << endl;  
  40.     cout << "矩阵 B :" << endl;  
  41.     for (int i=0; i<N*M; i++){  
  42.         cout << h_B[i] << " ";  
  43.         if ((i+1)%M == 0) 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.         1,    // 连续元素之间的存储间隔  
  87.         d_A,    // GPU 端起始地址  
  88.         1    // 连续元素之间的存储间隔  
  89.     );  
  90.     cublasSetVector (  
  91.         N*M,   
  92.         sizeof(float),   
  93.         h_B,   
  94.         1,   
  95.         d_B,   
  96.         1  
  97.     );  
  98.   
  99.     // 同步函数  
  100.     cudaThreadSynchronize();  
  101.   
  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  
  120.     );  
  121.       
  122.     // 同步函数  
  123.     cudaThreadSynchronize();  
  124.   
  125.     // 从 显存 中取出运算结果至 内存中去  
  126.     cublasGetVector (  
  127.         M*M,    //  要取出元素的个数  
  128.         sizeof(float),    // 每个元素大小  
  129.         d_C,    // GPU 端起始地址  
  130.         1,    // 连续元素之间的存储间隔  
  131.         h_C,    // 主机端起始地址  
  132.         1    // 连续元素之间的存储间隔  
  133.     );  
  134.       
  135.     // 打印运算结果  
  136.     cout << "计算结果的转置 ( (A*B)的转置 ):" << endl;  
  137.   
  138.     for (int i=0;i<M*M; i++){  
  139.             cout << h_C[i] << " ";  
  140.             if ((i+1)%M == 0) 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 0;  
  157. }  
顺利生成项目。运行,结果如下:





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值