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,估计未来会有更多的好显卡和选项,谁知道呢,暂时就这么多

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值