Oct 09, 2018 原创文章

  编译GPU版本的OpenCV

编译并安装配置使用GPU加速的OpenCV

分享到: 0

请保证您的浏览器支持MathJax插件,以免数学公式无法显示


编译GPU版本的OpenCV与CPU版本的OpenCV并没有太大的区别,只有几个需要在细节上注意的地方。除此之外,可以参考: 《从源码开始,在Ubuntu上安装OpenCV》 这篇文章讲述的方法进行。

在安装之前,要确认已经在电脑中正确安装了 CUDA 开发包和 NVCC 编译器。

配置CMAKE

WITH_CUDA ON

WITH_CUBLAS ON

WITH_CUFFT ON

WITH_NVCUVIDs ON

CUDA_FAST_MATH ON

CUDA_GENERATION Auto

其他的选项默认即可。

可能会出现的BUG

在使用CUDA 9.0的时候,编译OpenCV可能会如下的错误,而且无论是 OpenCV 2.x 还是 OpenCV 3.x 都有出现的可能,但是解决方法略有差别。

所以,推荐使用 CUDA 8.0 配置

错误信息

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_nppi_LIBRARY (ADVANCED)

这个错误在使用CUDA9.0 的时候会出现,其解决方法仅对此有效。

解决方法

可以参考Stackoverflow上的这个方法: https://stackoverflow.com/questions/46584000/cmake-error-variables-are-set-to-notfound

具体方法如下找到:
找到FindCUDA.cmake文件,将nppi库替换为几个分散的库,总共有三处。提示:修改.cmake文件,请务必注意每一行的缩进。

1)找到

find_cuda_helper_libs(nppi)

并将其替换为:

find_cuda_helper_libs(nppial)
find_cuda_helper_libs(nppicc)
find_cuda_helper_libs(nppicom)
find_cuda_helper_libs(nppidei)
find_cuda_helper_libs(nppif)
find_cuda_helper_libs(nppig)
find_cuda_helper_libs(nppim)
find_cuda_helper_libs(nppist)
find_cuda_helper_libs(nppisu)
find_cuda_helper_libs(nppitc)

2)找到

set(CUDA_npp_LIBRARY “${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}”)

将其替换为:

set(CUDA_npp_LIBRARY “${CUDA_nppc_LIBRARY};${CUDA_nppial_LIBRARY};${CUDA_nppicc_LIBRARY};${CUDA_nppicom_LIBRARY};${CUDA_nppidei_LIBRARY};${CUDA_nppif_LIBRARY};${CUDA_nppig_LIBRARY};${CUDA_nppim_LIBRARY};${CUDA_nppist_LIBRARY};${CUDA_nppisu_LIBRARY};${CUDA_nppitc_LIBRARY};${CUDA_npps_LIBRARY}”)

3)找到

unset(CUDA_nppi_LIBRARY CACHE)

修改为:

unset(CUDA_nppial_LIBRARY CACHE)
unset(CUDA_nppicc_LIBRARY CACHE)
unset(CUDA_nppicom_LIBRARY CACHE)
unset(CUDA_nppidei_LIBRARY CACHE)
unset(CUDA_nppif_LIBRARY CACHE)
unset(CUDA_nppig_LIBRARY CACHE)
unset(CUDA_nppim_LIBRARY CACHE)
unset(CUDA_nppist_LIBRARY CACHE)
unset(CUDA_nppisu_LIBRARY CACHE)
unset(CUDA_nppitc_LIBRARY CACHE)

4)将 cuda_fp16.h 头文件添加到下列文件中的include中

对于OpenCV 2.x

modules\gpu\include\opencv2\gpu\device\common.hpp

对于 OpenCV 3.x

modules\cudev\include\opencv2\cudev\common.hpp

如果使用的OpenCV 3.x,则还需要进行如下一步的修改。

打开 OpenCVDetectCUDA.cmake 找到:


set(__cuda_arch_ptx “”)
if(CUDA_GENERATION STREQUAL “Fermi”)
set(__cuda_arch_bin “2.0”)
elseif(CUDA_GENERATION STREQUAL “Kepler”)
set(__cuda_arch_bin “3.0 3.5 3.7”)

修改为:


set(__cuda_arch_ptx “”)
if(CUDA_GENERATION STREQUAL “Kepler”)
set(__cuda_arch_bin “3.0 3.5 3.7”)
elseif(CUDA_GENERATION STREQUAL “Maxwell”)
set(__cuda_arch_bin “5.0 5.2”)

再将:

set(__cuda_arch_bin “2.0 3.0 3.5 3.7 5.0 5.2 6.0 6.1”)

修改为:

set(__cuda_arch_bin “3.0 3.5 3.7 5.0 5.2 6.0 6.1”)


打赏


感谢您的支持,我会继续努力的!

扫码支持

长按识别二维码或打开支付宝扫一扫 完成打赏
或 使用<支付宝链接>打赏


关闭

分享到: 0