Windows+CUDA9.0+opencv2.4.13.6[还是有几个小错误-不推荐]

参考博客:

https://davidstutz.de/compiling-opencv-2-4-x-with-cuda-9/

在尝试使用CUDA 9编译OpenCV 2(例如OpenCV 2.4.13.6)时,主要有两个问题:

  • nppi库在CUDA 9下被拆分为一系列库,防止发送的FindCUDA.cmake脚本找到它;
  • 并且FindCUDA.cmake没有正确处理最新的GPU架构。

第一个问题解决:

https://stackoverflow.com/questions/46584000/cmake-error-variables-are-set-to-notfound

修改好的下载地址:

https://github.com/davidstutz/opencv-2.4-cuda-9-patch

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)

然后

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}")

接着

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)

以上,可以解决第一个问题;

接着,解决第二个问题:

OpenCVDetectCuda.cmake,解决第二个问题需要另外两个调整。特别是,_generations变量需要反映最新的GPU代,并需要将它们正确映射到相应的计算功能。

搜索 _generations 找到下面这一行

完成替换

set(_generations "Fermi" "Kepler" "Maxwell" "Pascal" "Volta")

然后找到下面这一行

变成:

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")
elseif(CUDA_GENERATION STREQUAL "Maxwell")
  set(__cuda_arch_bin "5.0 5.2")
elseif(CUDA_GENERATION STREQUAL "Pascal")
  set(__cuda_arch_bin "6.0 6.1")
elseif(CUDA_GENERATION STREQUAL "Volta")
  set(__cuda_arch_bin "7.0")
elseif(CUDA_GENERATION STREQUAL "Auto")

最后,为避免编译错误,--expt-relaxed-constexpr需要设置NVCC标志。为此,FindCUDA.cmake需要进行调整:

找到一个大致的位置,添加一句话:

set(nvcc_flags "--expt-relaxed-constexpr")

最后cmake的时候

搜索 CUDA_GENERATION

这个是你的GPU架构

我是笔记本GTX1060

https://www.techpowerup.com/gpu-specs/geforce-gtx-1060-mobile.c3016

架构是 Pascal 

所以camke的时候,将CUDA_GENERATION设置为Pascal

Fermi     Kepler  Maxwell  Pascal   Volta   Auto

这个项,只能设置上述的值

现在是2018.11.4,估计未来会有更多的好显卡和选项,谁知道呢,暂时就这么多

猜你喜欢

转载自blog.csdn.net/baidu_40840693/article/details/83718819