VS2017+CUDA开发环境的配置

Posted FILWY_M

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS2017+CUDA开发环境的配置相关的知识,希望对你有一定的参考价值。

GPU开发环境配置

一、VS2017安装

  1. 下载VS

    下载链接:需要登陆微软账号,没有注册一个即可

  2. 安装VS

    安装组件选择,只需要选择最基本的C/C++开发即可(.NET桌面开发可以不用)
    安装位置更改
    点击安装即可
    安装完成后打开界面如下

  3. 创建一个C++程序进行测试
    点击确定,等待项目创建,项目会自动创建一个cpp文件,测试代码如下:

    #include <iostream>
    
    int main()
    
        std::cout << "Hello World!\\n";
    
    
    

    执行程序:

二、CUDA安装

  1. 下载CUDA

    CUDA Toolkit Archive | NVIDIA Developer

  2. 安装CUDA

    双击下载的exe,进行安装

    临时解压路径,建议默认即可,也可以自定义。安装结束后,临时解压文件夹会自动删除。
    首先会检查系统兼容性,等待,然后出现如下界面,证明系统兼容此版本CUDA。
    点击同意并继续
    点击下一步,等待安装即可
    安装完成,点击关闭

  3. 添加系统变量

    按照下面的代码添加系统变量

    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
    

    如:添加CUDA_SDK_PATH = C:\\ProgramData\\NVIDIA Corporation\\CUDA Samples\\v10.1,如下图所示,点击确定即可。
    添加完成后的系统变量如下,注意检查变量中不能有多余的空格。
    其中CUDA_PATH和CUDA_V10_1是安装CUDA时自动添加的。

  4. 添加环境变量到PATH

    %CUDA_LIB_PATH%
    
    %CUDA_BIN_PAHT%
    
    %CUDA_SDK_BIN_PAHT%
    
    %CUDA_SDK_LIB_PATH%
    ```![\\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ykQBybB-1639213597841)(C:\\Users\\13751\\AppData\\Roaming\\Typora\\typora-user-images\\image-20211207152252574.png)\\]](https://img-blog.csdnimg.cn/1bf8d0a466d248d3b47fa4bd04079f56.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBARklMV1lfTQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
    结果如下:   ![\\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B1oKyLck-1639213597841)(C:\\Users\\13751\\AppData\\Roaming\\Typora\\typora-user-images\\image-20211207152321199.png)\\]](https://img-blog.csdnimg.cn/f153900ce0c946cdac2f5da297a2d02e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBARklMV1lfTQ==,size_19,color_FFFFFF,t_70,g_se,x_16)
    ==完成后重启电脑。==
    
    win+R打开cmd
    
    输入set cuda:   ![\\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kYAno25s-1639213597842)(C:\\Users\\13751\\AppData\\Roaming\\Typora\\typora-user-images\\image-20211207153019821.png)\\]](https://img-blog.csdnimg.cn/9da12e5fec994d25b240874b15f43e55.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBARklMV1lfTQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
    
  5. 检查CUDA是否安装成功

    打开cmd,输入:cd C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v10.1\\extras\\demo_suite进入自己安装的目录

    输入dir命令可以查看当前路径下的文件,可以看到有一个名为deviceQuery.exe的文件
    输入deviceQuery.exe执行,结果如下图所示,Result = PASS表示安装成功了,如果Result = Fail就重装或者更换CUDA的版本。
    继续执行当前目录下的bandwidthTest.exe
    可以看到Result = PASS,证明安装成功。

三、在VS2017中配置CUDA

  1. 创建项目

  2. 添加源文件*.cu

  3. 生成依赖项

  4. 配置cuda_test.cu文件属性

  5. 配置cuda工程属性
    在包含目录中添加C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v10.1\\include
    在库目录中添加 C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v10.1\\lib\\x64 结果如下
    注意:要根据自己的CUDA安装添加正确的目录

  6. 添加依赖项,链接器→输入→附加依赖项。再附加依赖项中添加相应的.lib文件名称
    这里将所有的lib都加上了

    cublas.lib
    cublasLt.lib
    cuda.lib
    cudadevrt.lib
    cudart.lib
    cudart_static.lib
    cufft.lib
    cufftw.lib
    curand.lib
    cusolver.lib
    cusolverMg.lib
    cusparse.lib
    nppc.lib
    nppial.lib
    nppicc.lib
    nppicom.lib
    nppidei.lib
    nppif.lib
    nppig.lib
    nppim.lib
    nppist.lib
    nppisu.lib
    nppitc.lib
    npps.lib
    nvblas.lib
    nvgraph.lib
    nvjpeg.lib
    nvml.lib
    nvrtc.lib
    OpenCL.lib
    ```![\\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-btOvLUAX-1639213597854)(C:\\Users\\13751\\AppData\\Roaming\\Typora\\typora-user-images\\image-20211207160701639.png)\\]](https://img-blog.csdnimg.cn/ad012bbbe5364cbc8acd87847e92a385.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBARklMV1lfTQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
    然后点击确定。其中lib的路径在安装的位置,如下图所示:   ![\\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6J5hTYvr-1639213597854)(C:\\Users\\13751\\AppData\\Roaming\\Typora\\typora-user-images\\image-20211207160637431.png)\\]](https://img-blog.csdnimg.cn/10602a2a3c6c44ad8b4a9b6684c56bc7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBARklMV1lfTQ==,size_20,color_FFFFFF,t_70,g_se,x_16)7. 添加测试程序
    
    
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
 
int main() 
    int deviceCount;
    cudaGetDeviceCount(&deviceCount);
 
    int dev;
    for (dev = 0; dev < deviceCount; dev++)
    
        int driver_version(0), runtime_version(0);
        cudaDeviceProp deviceProp;
        cudaGetDeviceProperties(&deviceProp, dev);
        if (dev == 0)
            if (deviceProp.minor = 9999 && deviceProp.major == 9999)
                printf("\\n");
        printf("\\nDevice%d:\\"%s\\"\\n", dev, deviceProp.name);
        cudaDriverGetVersion(&driver_version);
        printf("CUDA驱动版本:                                   %d.%d\\n", driver_version / 1000, (driver_version % 1000) / 10);
        cudaRuntimeGetVersion(&runtime_version);
        printf("CUDA运行时版本:                                 %d.%d\\n", runtime_version / 1000, (runtime_version % 1000) / 10);
        printf("设备计算能力:                                   %d.%d\\n", deviceProp.major, deviceProp.minor);
        printf("Total amount of Global Memory:                  %u bytes\\n", deviceProp.totalGlobalMem);
        printf("Number of SMs:                                  %d\\n", deviceProp.multiProcessorCount);
        printf("Total amount of Constant Memory:                %u bytes\\n", deviceProp.totalConstMem);
        printf("Total amount of Shared Memory per block:        %u bytes\\n", deviceProp.sharedMemPerBlock);
        printf("Total number of registers available per block:  %d\\n", deviceProp.regsPerBlock);
        printf("Warp size:                                      %d\\n", deviceProp.warpSize);
        printf("Maximum number of threads per SM:               %d\\n", deviceProp.maxThreadsPerMultiProcessor);
        printf("Maximum number of threads per block:            %d\\n", deviceProp.maxThreadsPerBlock);
        printf("Maximum size of each dimension of a block:      %d x %d x %d\\n", deviceProp.maxThreadsDim[0],
            deviceProp.maxThreadsDim[1],
            deviceProp.maxThreadsDim[2]);
        printf("Maximum size of each dimension of a grid:       %d x %d x %d\\n", deviceProp.maxGridSize[0], deviceProp.maxGridSize[1], deviceProp.maxGridSize[2]);
        printf("Maximum memory pitch:                           %u bytes\\n", deviceProp.memPitch);
        printf("Texture alignmemt:                              %u bytes\\n", deviceProp.texturePitchAlignment);
        printf("Clock rate:                                     %.2f GHz\\n", deviceProp.clockRate * 1e-6f);
        printf("Memory Clock rate:                              %.0f MHz\\n", deviceProp.memoryClockRate * 1e-3f);
        printf("Memory Bus Width:                               %d-bit\\n", deviceProp.memoryBusWidth);
    
 
    return 0;

运行代码时,注意选择对位数。
到此,CUDA环境以及VS2017就全部配置完毕!

四、错误总结

  1. 在第一次执行程序的时候出现如下问题
    原因是在配置库目录和包含目录的时候,路径不对,改为自己安装的正确路径即可,然后就是包含的库要完整,建议将所有的库都包含上,一定要正确配置路径
    配置正确后,再执行程序,得到正确结果。

以上是关于VS2017+CUDA开发环境的配置的主要内容,如果未能解决你的问题,请参考以下文章

VS2017+CUDA开发环境的配置

VS2017+CUDA开发环境的配置

vs2017+opencv+qt+cuda,使用cmake编译opencv的库

CUDA开发详解篇一

CUDA开发详解篇一

CUDA开发详解篇一