Windows10 64位CUDA10.1开发环境安装教程

Windows7 64位CUDA10.1开发环境安装教程

一、环境说明

1、软件环境

windows10 64位

CUDA 10.1

Visio Studio 2017

2、硬件环境

(1)查看本机显卡

(2)下载显卡驱动

https://www.nvidia.com/Download/index.aspx?lang=en-us

(3)下载CUDA开发工具

下载CUDA 10.1

https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal

 

二、安装配置

1、安装显卡驱动和CUDA 10.1

2、测试环境

出现以上信息配置成功

3、编译测试文件

(1)找到以下文件,并使用VS2017打开

(2)编译生成

(3)配置环境变量

检验CUDA_PATH和CUDA_PATH_V10.0已经存在

然后添加如下环境变量

CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.1 
CUDA_LIB_PATH = %CUDA_PATH%\lib\x64 
CUDA_BIN_PATH = %CUDA_PATH%\bin 
CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64 
CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64
配置完成后需要重启电脑后,再一次查看

4、配置VS2017

(1)打开vs2017,创建测试工程

(2)新建的工程中添加CUDA C/C++ File

(3)添加项目依赖项,选择CUDA 10.1

(4)cuda_main.cu的属性配置成“CUDA C/C++”

5、项目配置

只配置X64

(1)包含目录配置

项目属性–>属性–>配置属性–>VC++目录–>包含目录 

添加包含目录: $(CUDA_PATH)\include

(2)库目录配置

VC++目录–>库目录 

添加库目录: $(CUDA_PATH)\lib\x64

(3)依赖项配置

配置属性–>链接器–>输入–>附加依赖项 

添加库文件: 
    cublas.lib 
    cuda.lib 
    cudadevrt.lib 
    cudart.lib 
    cudart_static.lib 
    nvcuvid.lib (添加了该库后程序运行时会报错,去掉该库)
    OpenCL.lib

6、检验

  • 打开命令提示符:定位到 c:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.1\bin\win64\Release
  • 分别输入deviceQuery,bandwidthTest并运行,出现如下类似信息便说明CUDA安装成功

三、实际测试

参考:https://blog.csdn.net/u013165921/article/details/77891913

在GPU中完成一个矩阵的计算

将以下代码放到二中建立的cuda_main.cu文件,并运行

 
  1. // CUDA runtime 库 + CUBLAS 库

  2. #include "cuda_runtime.h"

  3. #include "cublas_v2.h"

  4.  
  5. #include

  6. #include

  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. }

运行结果如下所示:

参考:

https://blog.csdn.net/linj_m/article/details/41314763

https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html#verify-you-have-cuda-enabled-system

https://blog.csdn.net/u013165921/article/details/77891913

你可能感兴趣的:(CUDA,Microsoft,Visual,C++,14.0)