Создайте OpenCV с поддержкой CUDA
Я использую 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
Ответы
Ответ 1
Другой вариант.
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
до патча, поэтому я не знаю точно.
Ответ 2
При использовании cmake для выполнения конфигураций установите для параметра вашей конфигурации GPU опцию CUDA_GENERATION. Я столкнулся с той же ошибкой и попытался решить эту проблему.
Ответ 3
В ответ на ответ 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.)
Ответ 4
Спасибо,
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..
Позвольте мне установить opencv-2.4.9.
Если вы хотите узнать больше подробностей, проверьте эту ссылку .
Ответ 5
Вы должны установить с помощью cmake
эти записи CUDA_ARCH_BIN = 3.2
и CUDA_ARCH_PTX = 3.2
Надеюсь, что это поможет.
Привет
Ответ 6
Это связано с тем, что ваш тип gpu несовместим.
Вы должны явно определить CUDA_GENERATION.
В моей стороне я мог найти 3 типа CUDA_GENERATION; Авто, Кеплер, Ферми.
Когда я устанавливаю CUDA_GENERATION как Kepler, compute_11 изменен на compute_30 и будет успешным.
Ответ 7
Вы можете использовать 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) о том, что автоматическое обнаружение не работает должным образом.
Ответ 8
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