J'utilise CMake pour générer une solution Visual Studio 2013. Ensuite, essayez de le construire, mais obtenez l'erreur de suivi:
Création de modules d'objet NVCC (périphérique)/core/CMakeFiles/cuda_compile.dir/src/cuda/Debug/cuda_compile_generated_gpu_mat.cu.obj
nvcc fatal: architecture gpu non prise en charge 'compute_11'
J'essaie la version 2.10 et 3.0 avec cuda 6.5 et 7.0. CUDA_Arch_BIN défini sur: 1,1 1,2 1,3 2,0 2,1 (2,0) 3,0 3,5
Une autre option. 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 ..
J'ai également appliqué le patch , mais je ne sais pas s'il a finalement été nécessaire. J'avais essayé avec et sansCUDA_GENERATION=Maxwell
mais Maxwell n'est pas détecté. Je n'ai pas essayé CUDA_GENERATION=Auto
avant le patch, c'est pourquoi je n'en suis pas sûr.
Lorsque vous utilisez cmake pour effectuer des configurations, définissez l'option CUDA_GENERATION pour spécifier votre architecture GPU. J'ai rencontré la même erreur et j'ai essayé de résoudre le problème.
Suite à la réponse de Yun (n'a pas pu laisser de commentaire), cela a fonctionné pour moi et montre une valeur possible pour CUDA_GENERATION:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..
(Ubuntu 12.04 et 14.04, GTX Titan et OpenCV 2.4.11 et 3.0.0.)
Vous pouvez utiliser CUDA_GENERATION
pour spécifier le nom de code de génération correspondant à votre architecture GPU.
Voici le code opencv cmake qui analyse le CUDA_GENERATION
valeur:
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()
Et la page wikipedia CUDA a un joli tableau pour mapper votre carte vidéo au bon nom de code de microarchitecture (désolé, il est trop grand pour être reproduit ici):
https://en.wikipedia.org/wiki/CUDA#GPUs_supported
Par exemple, mon Macbook Pro 2012 est doté d'une GeForce GT 650M antique, qui, selon le tableau de Wikipédia, utilise la microarchitecture Kepler. Par conséquent, j'utilise ceci dans ma ligne de commande cmake:
cmake -D CUDA_GENERATION="Kepler" ...
et le script opencv le convertit en "3.0 3.5 3.7" lorsqu'il affiche le résumé de la configuration et transmet les drapeaux correspondants à nvcc
.
Dans mon cas, avant de régler cela correctement, je recevais des erreurs sur compute_70
non supporté. Apparemment, il y a toujours un problème ouvert dans le tracker opencv à ce jour (2017-10-07) sur la détection automatique qui ne fonctionne pas correctement.
Je vous remercie,
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..
Cela m'a permis d'installer opencv-2.4.9.
Si vous voulez en savoir plus, vérifiez ceci link .
Cela est dû au fait que votre type de processeur graphique ne correspond pas.
Vous devez définir explicitement CUDA_GENERATION.
De mon côté, j'ai pu trouver 3 types de CUDA_GENERATION; Auto, Kepler, Fermi.
Lorsque j'ai défini CUDA_GENERATION comme Kepler, compute_11 est devenu compute_30 et la construction a réussi.
Vous devez définir avec cmake
ces entrées CUDA_Arch_BIN = 3.2
et CUDA_Arch_PTX = 3.2
J'espère que ça aide.
Cordialement
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 ..
a travaillé pour moi pour OpenCV 2.4.11