私はCMakeを使用して、Visual Studio 2013ソリューションを生成します。次に、それをビルドしようとしますが、フォローエラーが発生します:
NVCC(デバイス)オブジェクトの構築modules/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
別のオプション。 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 ..
patch も適用しましたが、最終的に必要かどうかはわかりません。ありとなしCUDA_GENERATION=Maxwell
しかし、Maxwellは検出されません。試していないCUDA_GENERATION=Auto
パッチの前に、それは私が確かに知らない理由です。
Cmakeを使用して構成を行う場合、オプションCUDA_GENERATIONを特定のGPUアーキテクチャに設定します。私は同じエラーに出くわし、これを試して問題を解決しました。
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。)
CUDA_GENERATION
を使用して、GPUアーキテクチャに対応する生成コード名を指定できます。
関連する opencv cmakeコード は、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ページには、ビデオカードを適切なマイクロアーキテクチャコード名にマッピングするための素敵なテーブルがあります(申し訳ありませんが、ここで再現するには大きすぎます)。
https://en.wikipedia.org/wiki/CUDA#GPUs_supported
たとえば、2012年中頃のMacbook ProにはアンティークのGeForce GT 650Mがあります。これは、ウィキペディアの表で、Keplerマイクロアーキテクチャを使用していることが示されています。したがって、私はこれをcmakeコマンドラインで使用します。
cmake -D CUDA_GENERATION="Kepler" ...
また、opencvスクリプトは、構成サマリーを表示するときに「3.0 3.5 3.7」に変換し、対応するフラグをnvcc
に渡します。
私の場合、これを適切に設定する前に、compute_70
がサポートされていないというエラーが表示されていました。どうやら、自動検出が正常に動作しないという今日(2017-10-07)現在、まだ opencvトラッカーの未解決の問題 があります。
ありがとうございました、
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..
これにより、opencv-2.4.9をインストールできます。
詳細を知りたい場合は、この link をチェックしてください。
これは、GPUタイプが一致しないためです。
CUDA_GENERATIONを明示的に定義する必要があります。
私の側では、3種類のCUDA_GENERATIONを見つけることができました。オート、ケプラー、フェルミ。
CUDA_GENERATIONをKeplerに設定すると、compute_11がcompute_30に変わり、ビルドが成功しました。
cmake
でこれらのエントリを設定する必要がありますCUDA_Arch_BIN = 3.2
およびCUDA_Arch_PTX = 3.2
それが役に立てば幸い。
よろしく
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で働いていました