我嘗試了以下內容和它的工作:
變化FindCUDA.cmake
的nppi
庫的幾個分裂的。這必須在3個地方完成。請記住,此更改只是爲了使其適用於CUDA 9.0,而不是對版本或任何其他內容進行檢查,如果您計劃將其分發給具有不同CUDA版本的不同人員,則應該這樣做。
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)
而且也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")
...
它應該是:
...
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")
...
基本上我除去第一和如果所述第一elif的轉向如果一個。
它需要的最後一件事。 CUDA 9.0現在有一個用於halffloat的分離文件(cuda_fp16.h
)。這需要包含在OpenCV中。
來自CUDA 9。0手冊:
Unsupported Features General CUDA ‣ CUDA library. The built-in functions __float2half_rn() and __half2float() have been removed. Use equivalent functionality in the updated fp16 header file from the CUDA toolkit.
要做到這一點,你需要添加:
#include <cuda_fp16.h>
在頭文件
opencv-3.3.0\modules\cudev\include\opencv2\cudev\common.hpp
這是針對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相關。我沒有測試太多,我編譯並運行了一些性能測試,並且所有的測試都通過了...所以我認爲一切正常。
OpenCV未更新爲cuda 9 ...這是一週前發佈的版本。在cuda 9中,他們將這個圖書館分成了更小的圖書館。有些人創建了一個庫[擁有所有較小的庫](https://stackoverflow.com/questions/45525377/installing-opencv-3-3-0-with-contrib-modules-using-cmake-cuda-9 -O-RC-和可視)。 [Here](https://devtalk.nvidia.com/default/topic/1024631/cmake-cuda-9-project-configurations-fails-cuda_nppi_library-is-not-available-/)有人試圖修改cmake文件,但得到了另一個相對於缺少數學變量的錯誤 – api55
還修復了這一行上的斜線:'-D WITH_GTK = ON /' – Drop
@ api55那麼你建議我安裝哪些版本的opencv和cuda來安裝以及哪一個先安裝?我使用的是Ubuntu 16.04 –