提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


文章目录

  • 前言
  • 一、为什么要用到CUDA加速
  • 二、使用步骤
  • 1.CUDA安装
  • 2.QT安装
  • 3.编写好CUDA文件
  • 4.在QT的.pro文件中配置



前言

最近在项目中需要用到GPU加速,于是在网上搜索各种资料结合自己实际采坑过程,总结了在 win10系统上,在QT中使用CUDA加速的使用方法


提示:以下是本篇文章正文内容,下面案例可供参考

一、为什么要用到CUDA加速

该项目中用到了opencv处理图像,且对于图像处理速度有很高的要求,要保证实时性,那么如果仅仅使用CPU处理,由于CPU线程数量有限,每组图像处理时间可能达到3-5s,因此不得不尝试使用CUDA加速。

二、使用步骤

1.CUDA安装

CUDA安装教程在网上有一大堆,就只需在官网下载一个CUDA软件,我这里使用的是10.0版本,其他根据自己的显卡下载就行,如果觉得下载比较慢的,使用百度网盘下载也行,资源链接在下面:

链接:https://pan.baidu.com/s/1gtqduFeSsv4QKgsyVfBndw 提取码:f2hf

安装路径可以自己选择,但一定要记得自己安装在哪里。后续要用到,我的安装在默认位置
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0

2.QT安装

QT安装也是下载安装即可

3.编写好CUDA文件

将需要加速的部分写入到 .cu文件中,配合一个头文件。

4.在QT的.pro文件中配置

#此步骤是将文件中的 cu文件添加到CUDA_SOURCES变量中去,如果有多个cu文件,就添加多个, $$PWD是pro文件的当前路径
CUDA_SOURCES += $$PWD/test.cu		
##将cuda安装路径添加到 CUDA_DIR变量中	
CUDA_DIR = "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.0"  
#系统设置成win64的,32位设置成win32
SYSTEM_NAME = Win64							
# 64、 32位系统
SYSTEM_TYPE = 64						    
#GPU算力,可看我另一篇博客如何设置
CUDA_ARCH = sm_61							
#nvcc设置
NVCC_OPTIONS = --use_fast_math				
#cuda的头文件目录
INCLUDEPATH += $$CUDA_DIR/include  			
# 导入cuda库文件路径
QMAKE_LIBDIR += "$$CUDA_DIR/lib/x64"	
CUDA_INC = $$join(INCLUDEPATH,'" -I"','-I"','"')   

# cuda依赖库
CUDA_LIB_NAMES += \
cuda \
cudadevrt \
cudart \
cudadevrt \
cublas \
cudart_static \
for(lib, CUDA_LIB_NAMES) {
    NVCC_LIBS += -l$$lib
}
LIBS += $$NVCC_LIBS

MSVCRT_LINK_FLAG_DEBUG   = "/MDd"
MSVCRT_LINK_FLAG_RELEASE = "/MD"
#生成.cu文件的obj路径
CUDA_OBJECTS_DIR = ./release/obj/
#编译
CONFIG(debug, debug|release) {
    # Debug 模式
    OBJECTS_DIR = debug/obj
    cuda_d.input = CUDA_SOURCES
    cuda_d.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}.obj
    cuda_d.commands = $$CUDA_DIR/bin/nvcc.exe -D_DEBUG $$NVCC_OPTIONS $$CUDA_INC $$LIBS \
                      --machine $$SYSTEM_TYPE -arch=$$CUDA_ARCH \
                      --compile -cudart static -g -DWIN32 -D_MBCS \
                      -Xcompiler $$MSVCRT_LINK_FLAG_DEBUG \
                      -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
    cuda_d.dependency_type = TYPE_C
    QMAKE_EXTRA_COMPILERS += cuda_d
}
else {
    # Release 模式
    cuda.input = CUDA_SOURCES
    cuda.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cu.obj
    cuda.commands = $$CUDA_DIR/bin/nvcc.exe $$NVCC_OPTIONS $$CUDA_INC $$LIBS \
                    --machine $$SYSTEM_TYPE -arch=$$CUDA_ARCH \
                    --compile -cudart static -DWIN32 -D_MBCS \
                    -Xcompiler $$MSVCRT_LINK_FLAG_RELEASE \
                    -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
    cuda.dependency_type = TYPE_C
    QMAKE_EXTRA_COMPILERS += cuda
}

最终 qmake后即可成功运行