最近由于fork 的项目需要,在原本已经安装了opencv4.1+ cuda10.1 + cudnn7.5的Ubuntu1804上面安装cuda 8.0,并重新编译opencv4.1
说明:安装方式为 deb 包安装
步骤:
1, 官方网站下载cuda8.0(由于没有对应1804版本的包,我下的1604) 以及其补丁,下载对应版本的cudnn
2,进入下载文件夹,首先安装cuda8.0的包
sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda-8.0
3,安装补丁
sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-cublas-performance-update_8.0.61-1_amd64.deb
4,安装cudnn
先安装cudnn runtime的包
也是一样的方法 dpkg -i
再装cudnn developer的包
5,编译opencv 4.1.0
下载好contrib ,放入opencv对应的文件夹
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv-cuda-8 -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.1.0/modules -D PYTHON3_EXECUTABLE=/usr/bin/python3 -D PYTHON_EXECUTABLE=/usr/bin/python -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_GTK=ON -D WITH_OPENGL=ON -D BUILD_EXAMPLES=ON -D WITH_CUDA=ON -D BUILD_TIFF=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_opencv_cudacodec=OFF ..
make -j12
sudo make install
6,出现的错误
nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).
/home/wilson/Soft/opencv-4.1.0/opencv_contrib-4.1.0/modules/cudaimgproc/src/cuda/clahe.cu(191): error: identifier "__shfl_down" is undefined
找到cmake后产生的OpencvConfig.cmake文件,找到如下代码:
- # Version Compute Capability from which OpenCV has been compiled is remembered
- set(OpenCV_COMPUTE_CAPABILITIES -gencode;arch=compute_11,code=sm_11;-gencode;arch=compute_12,code=sm_12;-gencode;arch=compute_13,code=sm_13;-gencode;arch=compute_20,code=sm_20;-gencode;arch=compute_20,code=sm_21;-gencode;arch=compute_30,code=sm_30;-gencode;arch=compute_35,code=sm_35;-gencode;arch=compute_30,code=compute_30)
将"-gencode ;arch=compute_11,code=sm_11";-gencode;arch=compute_12,code=sm_12;-gencode;arch=compute_13,code=sm_13; 等删除。
还是不行的话,试下在cmake的时候加上,
CUDA_ARCH_BIN="7.5"
CUDA_ARCH_BIN代表你当前显卡的计算能力。具体的数值可以参考https://developer.nvidia.com/cuda-gpus。