Не удалось сгенерировать "openalpr_CUDA_Kepler", пожалуйста, помогите, если вы найдете решение

ановил cuda первым, используяcuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb, Сейчас пытаюсь установитьOpenCV 3.3.0 Но я получаю CMake Error:

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)

А потом очень длинный список целей, например:

linked by target "opencv_cudev" in directory /home/jjros/opencv-3.3.0/modules/cudev

Я использую эту команду для компиляции библиотеки:

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" .. 

Как установить мои CMakeLists? Что не так?

 Ivan Aksamentov - Drop05 окт. 2017 г., 18:26
Также исправьте косую черту в этой строке:-D WITH_GTK=ON /
 api5506 окт. 2017 г., 13:18
Я думаю, что с CUDA 8.0 должно работать, или вы пытаетесь изменить cmake, добавляя все библиотеки, на которые делится библиотека nppi, и удаляя библиотеку nppi. Я попробую последнее сегодня, если получится, я подробно отвечу на вопрос. Однако я бы использовал Windows вместо Ubuntu для моего теста, но это должно быть то же самое исправление
 Ja_cpp06 окт. 2017 г., 12:37
@ api55 так что вы предлагаете мне установить, какие версии opencv и cuda установить и какую установить первыми? Я использую Ubuntu 16.04
 api5505 окт. 2017 г., 13:10
OpenCV не обновляется до cuda 9 ..., который был выпущен неделю назад. В cuda 9 они разделили эту библиотеку на более мелкие. Некоторые люди создают библиотекукоторый имеет все меньшие. Вот кто-то попытался изменить файлы cmake, но получил другую ошибку относительно отсутствующей математической переменной

Ответы на вопрос(7)

как сказал api555, но когда cmake также собрал sm20, я сделал немного больше, двумя способами:

1. в файле OpenCVDetectCUDA.cmake, строка 133, в "foreach(ARCH IN LISTS ARCH_LIST)"цикл , добавить"elseif(ARCH MATCHES "20")«между, если и еще.

2. в файле OpenCVDetectCUDA.cmake, строка 46 "set(_generations "Fermi" "kepler" "Maxwell" "Pascal")"просто удалите" Ферми "

Я предпочитаю второй способ, пусть это немного поможет.

Решение Вопроса

Изменить в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")
  ...

В основном я удалил первый if, а первый elif превращается в if.

Как упомянуто @matko Он также имеет :

set(__cuda_arch_bin "2.0 3.0 3.5 3.7 5.0 5.2 6.0 6.1") 

Который должен быть изменен на:

set(__cuda_arch_bin "3.0 3.5 3.7 5.0 5.2 6.0 6.1") 

Последнее, что нужно. CUDA 9.0 имеет отдельный файл для Halffloat (cuda_fp16.h) в настоящее время. Это должно быть включено в OpenCV.

Из руководства CUDA 9.0:

Неподдерживаемые функции Общие CUDA library Библиотека CUDA. Встроенные функции __float2half_rn () и __half2float () были удалены. Используйте эквивалентную функциональность в обновленном заголовочном файле fp16 из набора инструментов CUDA.

Для этого вам нужно добавить:

#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) чтобы можно было легко изменять переменные или, по крайней мере, просматривать значения или реальный графический интерфейс.

Для других людей с Windows и Visual Studio 7, мне также пришлось изменитьCUDA_HOST_COMPILER переменная, иначе вы получите кучу ошибок сcmd.exe exit with code 1 или что-то подобное ... кажется, он не мог добраться с автоопределением.

Это работало для меня с OpenCV 3.3 и CUDA 9.0 и Visual Studio 2017 с Windows 10. Я думаю, что это должно работать и в Ubuntu, так как ошибка и изменения связаны с CUDA. Я не много тестировал, я скомпилировал и запустил некоторые тесты производительности, и все они прошли ... Так что я думаю, что все работало нормально.

 Jerry27 окт. 2017 г., 23:38
Действительно очень полезно. Спасибо за подробное руководство. Вы должны написать это где-нибудь.
 api5510 окт. 2017 г., 08:54
@Ja_cpp, который также находится в ответе, но, вероятно, переменная никогда не сбрасывается / сбрасывается, вы можете удалить папку сборки и начать заново, или вы можете установить переменную, удаляющую 2.0 из cuda_arch_bin, так как архитектура Fermi больше не поддерживается в CUDA 9,0
 GPrathap04 мар. 2019 г., 22:27
Отлично, не спрашиваю, как ты сделал все эти изменения. Но это сработало, большое спасибо за это :)
 dan14 нояб. 2017 г., 13:15
Спасибо за ваш ответ, это спасает меня.
 Ja_cpp10 окт. 2017 г., 00:03
Я сталкиваюсь с ошибкой, связанной с архитектурой GPU. Я пытаюсь решить это. Это говорит: nvcc fatal: Неподдерживаемая архитектура GPU 'compute_20' CMake Ошибка в cuda_compile_generated_gpu_mat.cu.o.cmake: 208 (сообщение): Ошибка генерации /home/jjros/opencv-3.3.0/build/modules/core/CMakeFiles/cuda_comp .dir / SRC / /./ cuda_compile_generated_gpu_mat.cu.o CUDA

он работает нормально. XD

 Rakshith Reddy27 дек. 2018 г., 13:52
Загрузите последнюю версию opencv (opencv 4.0.1), замените существующие файлы в. \ Openalpr \ windows \ opencv и попробуйте выполнить их. это сработало для меня. Мне удалось собрать opencv_CUDA_Kepler.
 Rakshith Reddy27 дек. 2018 г., 14:34
Не удалось сгенерировать "openalpr_CUDA_Kepler", пожалуйста, помогите, если вы найдете решение
 Jeroen Heier27 дек. 2018 г., 08:05
Постарайтесь объяснить более четко, почему это ответ на вопрос.

замещать

    if(${CUDA_VERSION} VERSION_LESS "8.0")
       set(__cuda_arch_bin "3.0 3.5 3.7 5.0 5.2")
     else()
       set(__cuda_arch_bin "3.0 3.5 3.7 5.0 5.2 6.0 6.1")
     endif()

с участием

    if(${CUDA_VERSION} VERSION_LESS "8.0")
      set(__cuda_arch_bin "3.0 3.5 3.7 5.0 5.2")    
      set(CUDA_ARCH_BIN "3.0 3.5 3.7 5.0 5.2")
    else()
      set(__cuda_arch_bin "3.0 3.5 3.7 5.0 5.2 6.0 6.1")
      set(CUDA_ARCH_BIN "3.0 3.5 3.7 5.0 5.2 6.0 6.1")
    endif()

FindCUDA.cmake а такжеOpenCVDetectCUDA.cmake изhttps://github.com/opencv/opencv/tree/master/cmake (master branch- opencv 3.4.1) у меня работаетopencv_2.4.13 с участиемNVIDIA TitanXP видеокартапаскаль Архитектура и с9,0-CUDA на Ubuntu 16.04.

 Kasparov9213 авг. 2018 г., 01:57
Я попробовал это, и я получил эти ошибки:/usr/bin/ld: cannot find -lcudart /usr/bin/ld: cannot find -lnppc /usr/bin/ld: cannot find -lnppial /usr/bin/ld: cannot find -lnppicc /usr/bin/ld: cannot find -lnppicom /usr/bin/ld: cannot find -lnppidei /usr/bin/ld: cannot find -lnppif /usr/bin/ld: cannot find -lnppig /usr/bin/ld: cannot find -lnppim /usr/bin/ld: cannot find -lnppist ...
 A. B. M. Nazibullah10 февр. 2019 г., 17:56
@ Kasparov92, я думаю, вам нужно добавить каталог CUDA lib в LD_LIBRARY_PATH. Вы можете сделать это, добавив файл "cuda.conf" в каталог "/etc/ld.so.conf.d/" с содержимым "/ usr / local / cuda / lib", затем запустив "sudo ldconfig"

@ api55 Я, основываясь на этом процессе, могу завершиться, но все еще сталкиваюсь с проблемой @Ja_cpp (ошибка CMake в da_compile_generated_gpu_mat..o.cmake: 208 (message)), в моем процессе, но также необходимо добавить

в

OpenCVDetectCUDA.cmake

В нем есть:

set(__da_arch_bin "2.0 3.0 3.5 3.7 5.0 5.2 6.0 6.1") 

изменить на:

set(__da_arch_bin "3.0 3.5 3.7 5.0 5.2 6.0 6.1")

Это сработало для меня.

 api5515 окт. 2017 г., 16:44
Я пропустил это, приятно знать :)

CUDA_nppi_LIBRARY, Так что просто следуйте инструкциям, и это работает (для меня наUbuntu 16.04 с участиемopencv 3.3). Убедитесь, что ваша архитектура GPU поддерживается. ЯFermi который больше не поддерживается. Решение заключается в установкеCuda-8 с участиемgcc-5 компилятор при установкеopencv 3.3 с поддержкой cuda.

Ваш ответ на вопрос