• VS2015 配置cuda8.0


    总结如下:

    1  官网下载和系统匹配的cuda 软件  https://developer.nvidia.com/cuda-downloads

    2  直接使用默认选项安装 

    3 设置环境变量: 
    安装完毕后,在计算机上点右键,打开属性->高级系统设置->环境变量,可以看到系统中多了CUDA_PATH和CUDA_PATH_V8_0两个环境变量,接下来,还要在系统中添加以下几个环境变量: 
      CUDA_SDK_PATH = C:ProgramDataNVIDIA CorporationCUDA Samplesv8.0 
      CUDA_LIB_PATH = %CUDA_PATH%libx64 
      CUDA_BIN_PATH = %CUDA_PATH%in 
      CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%inwin64 
    CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%commonlibx64 
    因为安装路径是默认的,所以添加的路径分别是下面这样的: 
    CUDA_PATH 
    C:Program FilesNVIDIA GPU Computing ToolkitCUDAv8.0 
    CUDA_PATH_V8_0 
    C:Program FilesNVIDIA GPU Computing ToolkitCUDAv8.0 
    CUDA_SDK_PATH 
    C:ProgramDataNVIDIA CorporationCUDA Samplesv8.0 
    CUDA_LIB_PATH 
    C:Program FilesNVIDIA GPU Computing ToolkitCUDAv8.0libx64 
    CUDA_BIN_PATH 
    C:Program FilesNVIDIA GPU Computing ToolkitCUDAv8.0in 
    CUDA_SDK_BIN_PATH 
    C:ProgramDataNVIDIA CorporationCUDA Samplesv8.0inwin64 
    CUDA_SDK_LIB_PATH 
    C:ProgramDataNVIDIA CorporationCUDA Samplesv8.0commonlibx64 
    然后,在系统变量 PATH 的末尾添加: 
     ;%CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_LIB_PATH%;%CUDA_SDK_BIN_PATH%; 
    ;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv8.0libx64;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv8.0in;C:ProgramDataNVIDIA CorporationCUDA Samplesv8.0commonlibx64;C:ProgramDataNVIDIA CorporationCUDA Samplesv8.0inwin64; 
    重新启动计算机

    4 VS 配置:

    • 1.打开vs2013并创建一个空win32程序,创建一个cuda_samples的解决方案和cuda_test1项目: 
    • 2.右键源文件–>添加–>新建项,如下图所示:

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

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

    • 5.选择CUDA7.5

    • 6.点击cuda_main.cu的属性

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

    5 项目配置 

    5.1 包含目录配置

    • 1.右键点击项目属性–>属性–>配置属性–>VC++目录–>包含目录
    • 2.添加包含目录: 
      $(CUDA_PATH)include

    5.2 库目录配置

    • 1.VC++目录–>库目录
    • 2.添加库目录: 
      $(CUDA_PATH)libx64

    5.3 依赖项

      1. 配置属性–>连接器–>输入–>附加依赖项
      1. 添加库文件: 
        cublas.lib 
        cuda.lib 
        cudadevrt.lib 
        cudart.lib 
        cudart_static.lib 
        nvcuvid.lib 
        OpenCL.lib

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

    6 测试程序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    // 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 端起始地址
        // 连续元素之间的存储间隔
        );
    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 在显存中的地址(结果矩阵)
        //
        );
    // 同步函数
    cudaThreadSynchronize();
    // 从 显存 中取出运算结果至 内存中去
    cublasGetVector(M*M, // 要取出元素的个数
        sizeof(float), // 每个元素大小
        d_C, // GPU 端起始地址
        1, // 连续元素之间的存储间隔
        h_C, // 主机端起始地址
        // 连续元素之间的存储间隔
        );
    // 打印运算结果
    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;
    }

    7 运行结果:

    运行结果如下图所示:

    8 注意事项:

    注意选择VS编译选项为X64

  • 相关阅读:
    增加增删改查按钮
    基于.net创建一份报表模块
    bootstrap 三层设计
    DI 依赖注入之StructureMap框架
    unit vs2017基于nunit framework创建单元测试
    Oracle彻底卸载
    sql 统计常用的sql
    Webserver asp配置及伪静态设置
    MVC ASP.NET MVC5使用Area区域
    VS 发布MVC网站缺少视图解决方案
  • 原文地址:https://www.cnblogs.com/lyx2018/p/7905856.html
Copyright © 2020-2023  润新知