写在前面

以前只是在 PyCharm 编译环境中调用 GPU 来运行程序,这篇文章将记录 VS 编译环境中如何使用 CUDA 调用 GPU 来运行程序。

1 VS的安装

如果要在VS中调用CUDA,需先按照VS编译环境,因为CUDA在安装的过程中会自动将相关文件安装至VS环境中,所以要先安装VS,安装教程这里不再赘述。


2 CUDA 的安装和配置

2.1 CUDA的安装

首先是CUDA的下载和安装,安装教程这里不再赘述,要注意CUDA和GPU版本的对应。

2.2 CUDA环境变量的配置

参考这篇文章,在电脑中打开环境变量,根据下图,在系统变量里添加如下内容:

  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系统变量
【注】CUDA _PATHCUDA _PATH_V10_1是安装CUDA在时自动添加的,CUDA _PATH_V10_1中的10_1指的是安装的CUDA版本号。


接着, 根据下图所示,添加以下内容到用户变量path中:

  %CUDA_LIB_PATH%

  %CUDA_BIN_PAHT%

 %CUDA_SDK_BIN_PAHT%

  %CUDA_SDK_LIB_PATH%

配置用户变量Path

2.3 检验CUDA环境变量的配置

重启电脑,打开cmd,在命令行中输入 set cuda,可以看到刚才配置的CUDA的环境变量配置信息。

接下来通过cd命令切换到如下目录:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\demo_suite

输入如下命令:

deviceQuery.exe

即运行该目录下的deviceQuery.exe,如下所示:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\demo_suite>deviceQuery.exe

会在命令框中输出GPU的信息,如果最下面如下语句:

Result=PASS

则表示CUDA已安装和配置成功,且能调用CUDA加速程序的运行。


或者可以进入到如下所示的CUDA自带的测试案例目录中,如图所示:

C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.1\1_Utilities\deviceQuery

CUDA自带的测试案例VS打开*.sln文件,同样的,运行如果输出GPU的信息,则表示CUDA已配置成功,且能调用CUDA加速程序的运行。


3 VS中CUDA的配置

打开VS,新建工程后,如果想要调用GPU加速程序,则要找到属性管理器,在Debug模式中,新建一个*.props文件,点击右键,打开属性页,如下图所示,在左侧找到VC++目录,接着在包含目录中添加C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include,在库目录中添加C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib\x64
新建.props文件

VC++目录
其次,如下图所示,在左侧找到链接器,接着找到下面的输入,在右侧的附加依赖项中,添加如下内容:

cublas.lib
cublasLt.lib
cuda.lib
cudadevrt.lib
cudart.lib
cudart_static.lib
cufft.lib
cufftw.lib
curand.lib
cusolver.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
nvml.lib
nvrtc.lib
OpenCL.lib

链接器
至此,VS编译环境中的CUDA已经配置完毕。


4 VS中OpenCV的CUDA版本编译

在VS编译环境下,调用OpenCV库进行图像处理的过程中,如果想要使用GPU加速,则需要对OpenCV进行相应的编译,即编译Opencv的CUDA版本,用以驱动GPU。
(未完待续…)
本小节通过记录CUDA的编译过程,以期做到授之以渔。

4.1 未使用CUDA加速时

C++的图像处理代码,在未使用CUDA加速时,处理一张图像的速度可能要500ms左右,接下来尝试如何使用CUDA加速。

4.2 不修改代码,直接使用编译CUDA后的OpenCV来运行

官网下载的OpenCV是CPU版本的,如若想要调用GPU来运行程序,首先要编译CUDA版本的OpenCV,编译方法可以参考前辈的这篇文章
编译后,再次运行代码,一张图像的处理时间可以由原来的 500ms 降至 200ms,但通过检查代码运行过程中GPU的消耗,发现并未实现真正意义上的GPU调用,接下来需要修改代码。

4.3 编译OpenCV CUDA后,添加CUDA加速的代码

在原有代码的基础上,尝试修改代码,目的是实现真正意义上的GPU调用。在原有程序中添加下列CUDA加速的代码:

//加上这样几句之后,程序再运行dnn计算时,会使用gpu加速
net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);
net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);
//net.setPreferableBackend(cv::dnn::DNN_BACKEND_OPENCV);
//net.setPreferableTarget(cv::dnn::DNN_TARGET_CPU);

一张图像的处理所用时间继续降至了 2ms

【注】经试验发现,如果只添加CUDA加速的代码,而不使用经过OpenCV CUDA编译的库,则无法调用CUDA使用GPU加速。


安装过程中可能遇到的问题

情况1

在VS点击生成解决方案,会出现下面这样的找不到SDK报错信息,如下如图所示:

找不到windows SDK版本10.0.15063.0

VS报错信息
可能原因:缺少相应的SDK。
解决办法:参考这篇文章这篇文章,如下图所示,无需重装VS,找到VS的安装软件,点击打开,点击修改(modify),缺少哪个版本安装哪个windows SDK即可。
在这里插入图片描述

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐