Создайте OpenCV с поддержкой CUDA

192
19

Я использую CMake для создания решения visual studio 2013. Затем им нужно его построить, но получим следующую ошибку:


Создание объектных модулей NVCC (Device)/core/CMakeFiles/cuda_compile.dir/src/cuda/Debug/cuda_compile_generated_gpu_mat.cu.obj

nvcc fatal: Неподдерживаемая архитектура gpu 'compute_11'



Попробуйте версию 2.10 и 3.0 с cuda 6.5 и 7.0.
CUDA_ARCH_BIN установлен в: 1.1 1.2 1.3 2.0 2.1 (2.0) 3.0 3.5

спросил(а) 2021-01-25T17:15:28+03:00 5 месяцев назад
1
Решение
188

Другой вариант.
Ubuntu 14.04, GTX Titan X, opencv-2.4.10


cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_TIFF=ON -D BUILD_EXAMPLES=ON -D CUDA_GENERATION=Auto -D BUILD_NEW_PYTHON_SUPPORT=ON  .. 

Я также применил патч ,
но я не уверен, что это оказалось необходимым. Я пробовал с и без CUDA_GENERATION=Maxwell, но Максвелл не обнаружен. Я не пробовал CUDA_GENERATION=Auto до патча, поэтому я не знаю точно.

ответил(а) 2021-01-25T17:15:28+03:00 5 месяцев назад
146

В ответ на ответ Yun (не могу оставить комментарий) это сработало для меня и показывает возможное значение для CUDA_GENERATION:


cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..

(Ubuntu 12.04 и 14.04, GTX Titan и OpenCV 2.4.11 и 3.0.0.)

ответил(а) 2021-01-25T17:15:28+03:00 5 месяцев назад
147

При использовании cmake для выполнения конфигураций установите для параметра вашей конфигурации GPU опцию CUDA_GENERATION. Я столкнулся с той же ошибкой и попытался решить эту проблему.

ответил(а) 2021-01-25T17:15:28+03:00 5 месяцев назад
101

Спасибо,


cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..

Позвольте мне установить opencv-2.4.9.


Если вы хотите узнать больше подробностей, проверьте эту ссылку .

ответил(а) 2021-01-25T17:15:28+03:00 5 месяцев назад
76

Это связано с тем, что ваш тип gpu несовместим.


Вы должны явно определить CUDA_GENERATION.


В моей стороне я мог найти 3 типа CUDA_GENERATION; Авто, Кеплер, Ферми.


Когда я устанавливаю CUDA_GENERATION как Kepler, compute_11 изменен на compute_30 и будет успешным.

ответил(а) 2021-01-25T17:15:28+03:00 5 месяцев назад
78

Вы должны установить с помощью cmake эти записи CUDA_ARCH_BIN = 3.2 и CUDA_ARCH_PTX = 3.2


Надеюсь, что это поможет.


Привет

ответил(а) 2021-01-25T17:15:28+03:00 5 месяцев назад
63

Вы можете использовать CUDA_GENERATION, чтобы указать соответствующее кодовое имя поколения для вашей архитектуры графического процессора.


Вот соответствующий opencv cmake code, который анализирует значение CUDA_GENERATION:


  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")
elseif(CUDA_GENERATION STREQUAL "Maxwell")
set(__cuda_arch_bin "5.0 5.2")
elseif(CUDA_GENERATION STREQUAL "Pascal")
set(__cuda_arch_bin "6.0 6.1")
elseif(CUDA_GENERATION STREQUAL "Volta")
set(__cuda_arch_bin "7.0")
elseif(CUDA_GENERATION STREQUAL "Auto")
execute_process( COMMAND "${CUDA_NVCC_EXECUTABLE}" ${CUDA_NVCC_FLAGS} "${OpenCV_SOURCE_DIR}/cmake/checks/OpenCVDetectCudaArch.cu" "--run"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/"
RESULT_VARIABLE _nvcc_res OUTPUT_VARIABLE _nvcc_out
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT _nvcc_res EQUAL 0)
message(STATUS "Automatic detection of CUDA generation failed. Going to build for all known architectures.")
else()
set(__cuda_arch_bin "${_nvcc_out}")
string(REPLACE "2.1" "2.1(2.0)" __cuda_arch_bin "${__cuda_arch_bin}")
endif()
endif()

И на странице CUDA wikipedia есть таблица с хорошим соотношением для сопоставления вашей видеокарты с правильным названием микроархитектуры (извините, она слишком велика для воспроизведения здесь):


https://en.wikipedia.org/wiki/CUDA#GPUs_supported


Например, у моего среднесрочного 2012 Macbook Pro есть античный GeForce GT 650M, который в таблице wikipedia указывает на микроархитектуру Кеплера. Поэтому я использую это в моей командной строке cmake:


cmake -D CUDA_GENERATION="Kepler" ...


а opencv script преобразует его в "3.0 3.5 3.7", когда отображает сводку конфигурации, и передает соответствующие флаги nvcc.


В моем случае, прежде чем устанавливать это правильно, я получал ошибки в compute_70, которые не поддерживались. По-видимому, по-прежнему существует открытая проблема в opencv tracker на сегодняшний день (2017-10-07) о том, что автоматическое обнаружение не работает должным образом.

ответил(а) 2021-01-25T17:15:28+03:00 5 месяцев назад
45

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_TIFF=ON -D BUILD_EXAMPLES=ON -D CUDA_GENERATION=Kepler -D BUILD_NEW_PYTHON_SUPPORT=ON ..


работал у меня для OpenCV 2.4.11

ответил(а) 2021-01-25T17:15:28+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема