Подтвердить что ты не робот

Создайте 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

4b9b3361

Ответ 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