Próbowałem następujące i to działało:
Zmiana FindCUDA.cmake
nppi
biblioteki do kilku z nich podzielony. To musi być zrobione w 3 miejscach. Pamiętaj, że ta zmiana ma na celu sprawienie, by działała z CUDA 9.0, nie robię czeków dla wersji lub czegokolwiek, co powinno być zrobione, jeśli planujesz dać to różnym osobom z różnymi wersjami CUDA.
1) spojrzeć na linii z:
find_cuda_helper_libs(nppi)
i zastąpić go z linii:
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) znajdź linię:
set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}")
i zmienić go na
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) znaleźć zmienne wyłączony i dodawać nowe zmienne, jak również więc znaleźć:
unset(CUDA_nppi_LIBRARY CACHE)
i zmień ją na:
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)
a także w OpenCVDetectCUDA.cmake
trzeba wyjąć 2.0 architechture, która nie jest już obsługiwana.
Posiada:
...
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")
...
Powinno być:
...
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")
...
Zasadniczo usunąłem pierwszą jeśli i pierwszy Elif zamienia się if.
Ostatnia rzecz, jaka jest potrzebna. CUDA 9.0 ma teraz oddzielny plik dla halffloat (cuda_fp16.h
). To musi być zawarte w OpenCV.
Z CUDA 9.0 Instrukcja:
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.
Aby to zrobić, trzeba dodać:
#include <cuda_fp16.h>
w pliku nagłówkowym
opencv-3.3.0\modules\cudev\include\opencv2\cudev\common.hpp
To są podstawy do określonej poprawki dla OpenCV. Czego mu brakuje, jak już ci mówiłem, nie interesują mnie wersje CUDA (wymaga IF). Ponadto CUDA 9.0 ma kilka przestarzałych funkcji używanych przez OpenCV ... prawdopodobnie zostanie to w pewnym momencie zastąpione przez zespół OpenCV. Możliwe jest również, że jedna lub więcej z rozdzielonych bibliotek nppi nie jest używana.
Zalecenia końcowe: Dla tego rodzaju skomplikowanych cmakes z tak wielu opcji należy użyć ccmake (sudo apt-get install cmake-curses-gui
), aby móc łatwo zmienić zmienne lub przynajmniej zobaczyć wartości, albo jeden prawdziwy GUI.
Dla innych osób z oknami i studio graficznym 7, musiałem również zmienić zmienną CUDA_HOST_COMPILER
, inaczej dostaniesz mnóstwo błędów z cmd.exe exit with code 1
lub coś podobnego ... wygląda na to, że nie może się tam dostać z autodetekcją .
To działało dla mnie z OpenCV 3.3 i CUDA 9.0 oraz Visual Studio 2017 z Windows 10. Myślę, że powinien działać również w systemie Ubuntu, ponieważ błąd i zmiany są związane z CUDA. Nie testowałem tego zbyt wiele, skompilowałem i przeprowadziłem niektóre testy wydajności i wszystkie przeszły ... Myślę, że wszystko działało dobrze.
OpenCV nie jest aktualizowany do cuda 9 ... który był wydany jak tydzień temu. W cuda 9 rozdzielili tę bibliotekę na mniejsze. Niektórzy tworzą bibliotekę [zawierającą wszystkie mniejsze] (https://stackoverflow.com/questions/45525377/installing-opencv-3-3-0-with-contrib-modules-using-cmake-cuda-9 -0-rc-and-visual). [Tutaj] (https://devtalk.nvidia.com/default/topic/1024631/cmake-cuda-9-project-configurations-fails-cuda_nppi_library-is-not-available-/) ktoś próbuje zmodyfikować pliki cmake, ale dostałem kolejny błąd związany z brakującą zmienną matematyczną. – api55
Naprawiono również ukośnik w tym wierszu: '-D WITH_GTK = ON /' – Drop
@ api55 więc co sugerujesz mi zainstalować, które wersje opencv i cuda zainstalować, a które do najpierw zainstalować? Używam Ubuntu 16.04 –