1.1 安装cuda

首先官网下载安装包,这个就不细说了 ,我下的是这个版本cuda_8.0.61_win10.exe,,注意win7win10版本要对应,千万别弄错了 之后双击会出现如下截图,

cuda安装配置VS2013


解压完以后一直点下一步如下图

 cuda安装配置VS2013

出现这个等半个小时左右就好了

安装结束后开始配置系统环境变量

win10可以这么操作win+s 搜索环境,自动匹配出系统环境变量


1.2 配置环境变量

打开环境变量后如下图:

cuda安装配置VS2013


如图中点击环境变量的就是了打开后,如下图设置:

cuda安装配置VS2013


点击新建会出现:

 cuda安装配置VS2013

CUDA_PATH = C:\Program Files\NVIDIA GPUComputing Toolkit\CUDA\v8.0
CUDA_PATH_V7_5 = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0
CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0
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

将上面的变量名和变量值依次填入:

比如:

cuda安装配置VS2013

依次填入后,找到path如图:

 

cuda安装配置VS2013

依次点击新建, %CUDA_LIB_PATH%%CUDA_BIN_PATH%%CUDA_SDK_BIN_PATH%%CUDA_SDK_LIB_PATH%;依次填入,填入后效果如上图所示。全部安装好后一定要记得重启!,这里就将cuda win10中如何配置的完成了

 

1.4 VS2013 + CUDA7.5配置(其他版本VSCUDA都类似)

·        1.打开vs2013并创建一个空win32程序,创建一个cuda_samples的解决方案和cuda_test1项目:
cuda安装配置VS2013

 

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

cuda安装配置VS2013

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

cuda安装配置VS2013

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

cuda安装配置VS2013

·        5.选择CUDA7.5

cuda安装配置VS2013

·        6.点击cuda_main.cu的属性

cuda安装配置VS2013

·         

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


1.5 项目配置cuda安装配置VS2013

1.5.1 x64

1.5.1.1 包含目录配置

·        1.右键点击项目属性–>属性–>配置属性–>VC++目录–>包含目录

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

1.5.1.2 库目录配置

·        1.VC++目录–>库目录

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

1.5.1.3 依赖项

·         

1.  配置属性–>连接器–>输入–>附加依赖项

·         

1.  添加库文件: 
cublas.lib 
cuda.lib 
cudadevrt.lib 
cudart.lib 
cudart_static.lib 
nvcuvid.lib 
OpenCL.lib`

注意:添加nvcuvenc.lib库文件,编译时,报找不到该文件的错误。去掉后,程序也能运行

1.5.2 x86(win32)

1.5.2.1 包含目录配置

·         

1.  右键点击项目属性–>属性–>配置属性–>VC++目录–>包含目录

·         

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

1.5.2.2 库目录配置

·        1.VC++目录–>库目录

·        2.添加库目录: 
$(CUDA_PATH)\lib\Win32

1.5.2.3 依赖项

·         

1.  配置属性–>连接器–>输入–>附加依赖项

·         

1.  添加库文件: 
cuda.lib 
cudadevrt.lib 
cudart.lib 
cudart_static.lib 
nvcuvid.lib 
OpenCL.lib`

备注: win32x64位的lib库有差别,配置时需注意,除了上述添加的lib文件外,x64还有其他的lib库文件,如cublas.lib,如运行1.6的样例时,要添加这个库,不然会编译失败。

1.6 样例

// 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;

}

运行结果如下图所示:


 cuda安装配置VS2013

 

相关文章:

  • 2021-11-19
  • 2021-06-08
  • 2022-12-23
  • 2021-09-01
  • 2022-01-01
  • 2021-12-13
  • 2021-07-20
  • 2021-04-12
猜你喜欢
  • 2021-12-01
  • 2022-12-23
  • 2021-06-07
  • 2021-07-03
  • 2021-12-22
  • 2021-12-05
  • 2021-11-18
相关资源
相似解决方案