Ja_*_*cpp 23 opencv cuda cmake ubuntu-16.04
我首先使用cuda安装cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb.现在我正在尝试安装OpenCV 3.3.0但是我得到了CMake错误:
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)
Run Code Online (Sandbox Code Playgroud)
然后是很长的目标列表,如下所示:
linked by target "opencv_cudev" in directory /home/jjros/opencv-3.3.0/modules/cudev
Run Code Online (Sandbox Code Playgroud)
我正在使用此命令来编译库:
cmake
-D CMAKE_C_COMPILER=/usr/bin/gcc-5 \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_CUDA=ON \
-D WITH_CUBLAS=ON \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_SHARED_LIBS=ON \
-D WITH_GTK=ON \
-D BUILD_EXAMPLES=ON \
-D CUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..
Run Code Online (Sandbox Code Playgroud)
如何设置我的CMakeLists?出了什么问题?
api*_*i55 58
我尝试了以下工作:
FindCUDA.cmake将nppi库更改为多个已拆分的库.这必须在3个地方完成.请记住,此更改只是为了使其与CUDA 9.0一起使用,我没有对版本或任何内容进行检查,如果您计划将其提供给具有不同CUDA版本的不同人员,则应该这样做.
1)寻找以下行:
find_cuda_helper_libs(nppi)
Run Code Online (Sandbox Code Playgroud)
并用线代替它:
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)
Run Code Online (Sandbox Code Playgroud)
2)找到行:
set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}")
Run Code Online (Sandbox Code Playgroud)
并将其更改为
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}")
Run Code Online (Sandbox Code Playgroud)
3)找到未设置的变量并添加新的变量因此,找到:
unset(CUDA_nppi_LIBRARY CACHE)
Run Code Online (Sandbox Code Playgroud)
并将其更改为:
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)
Run Code Online (Sandbox Code Playgroud)
而且OpenCVDetectCUDA.cmake你必须删除不再支持的2.0架构.
它有:
...
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")
...
Run Code Online (Sandbox Code Playgroud)
它应该是:
...
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")
...
Run Code Online (Sandbox Code Playgroud)
基本上我删除了第一个if和第一个elif转向if.
正如@matko所提到 它还有:
set(__cuda_arch_bin "2.0 3.0 3.5 3.7 5.0 5.2 6.0 6.1")
Run Code Online (Sandbox Code Playgroud)
哪个应改为:
set(__cuda_arch_bin "3.0 3.5 3.7 5.0 5.2 6.0 6.1")
Run Code Online (Sandbox Code Playgroud)
最后一件事是需要的.CUDA 9.0现在有一个halffloat(cuda_fp16.h)的独立文件.这需要包含在OpenCV中.
从CUDA 9.0手册:
不支持的功能通用CUDA‣CUDA库.已删除内置函数__float2half_rn()和__half2float().使用CUDA工具包中更新的fp16头文件中的等效功能.
为此,您需要添加:
#include <cuda_fp16.h>
Run Code Online (Sandbox Code Playgroud)
在头文件中
opencv-3.3.0\modules\cudev\include\opencv2\cudev\common.hpp
Run Code Online (Sandbox Code Playgroud)
这是OpenCV明确补丁的基础知识.缺少什么,就像我之前告诉过你的那样,我不关心CUDA版本(它需要一个IF).此外,CUDA 9.0还有一些OpenCV使用的弃用功能......这可能会在某些时候由OpenCV团队取代.也可以不使用一个或多个nppi的分裂库.
最终建议:对于这种具有如此多选项的复杂cmakes,您应该使用ccmake(sudo apt-get install cmake-curses-gui)来轻松更改变量或至少查看值,或者使用真正的GUI.
对于Windows和Visual Studio 7的其他人,我也不得不更改CUDA_HOST_COMPILER变量,否则你会得到一堆cmd.exe exit with code 1或类似的错误......似乎它无法通过自动检测到达.
这适用于OpenCV 3.3和CUDA 9.0以及Windows 10的Visual Studio 2017.我认为它也适用于Ubuntu,因为错误和更改与CUDA有关.我没有测试过多少,我编译并运行了一些性能测试,所有这些测试都通过了......所以我认为一切正常.
| 归档时间: |
|
| 查看次数: |
27132 次 |
| 最近记录: |