【问题标题】:Build OpenCV with CUDA support使用 CUDA 支持构建 OpenCV
【发布时间】:2015-03-16 14:50:43
【问题描述】:

我使用 CMake 生成 Visual Studio 2013 解决方案。接下来我尝试构建它,但得到以下错误:

构建 NVCC(设备)对象 modules/core/CMakeFiles/cuda_compile.dir/src/cuda/Debug/cuda_compile_generated_gpu_mat.cu.obj

nvcc 致命:不支持的 gpu 架构“compute_11”

我尝试使用 cuda 6.5 和 7.0 版本 2.10 和 3.0。 CUDA_ARCH_BIN 设置为:1.1 1.2 1.3 2.0 2.1(2.0) 3.0 3.5

【问题讨论】:

    标签: opencv cuda


    【解决方案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  .. 
    

    我也申请了patch, 但我不确定最终是否需要它。我曾尝试使用和不使用CUDA_GENERATION=Maxwell,但未检测到 Maxwell。在补丁之前我没有尝试CUDA_GENERATION=Auto,所以我不确定。

    【讨论】:

    • 为什么要构建 tiff?
    • @user136266 因为我做的一些处理是使用 tiffs。它们在地理空间数据、栅格等中很常见。
    【解决方案2】:

    使用 cmake 进行配置时,将选项 CUDA_GENERATION 设置为特定于您的 GPU 架构。我遇到了同样的错误并尝试了这个来解决问题。

    【讨论】:

      【解决方案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】:

        您可以使用CUDA_GENERATION 为您的 GPU 架构指定相应的代号。

        这是解析CUDA_GENERATION值的相关opencv cmake code

          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 月 7 日)仍有一个 open issue in the opencv tracker 表示自动检测无法正常工作。

        【讨论】:

          【解决方案5】:

          谢谢,

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

          这让我安装了opencv-2.4.9。

          如果您想了解更多详情,请查看link

          【讨论】:

          • 感谢您回答问题。然而,这是一个仅链接的答案;最好在您的答案中包含更详细的描述以及您所指链接中的信息。
          【解决方案6】:

          这是因为你的 gpu 类型不匹配。

          您必须明确定义 CUDA_GENERATION。

          在我这边,我可以找到 3 种类型的 CUDA_GENERATION;汽车、开普勒、费米。

          当我将 CUDA_GENERATION 设置为 Kepler 时,compute_11 更改为 compute_30 并构建成功。

          【讨论】:

            【解决方案7】:

            您应该使用cmake 设置这些条目CUDA_ARCH_BIN = 3.2CUDA_ARCH_PTX = 3.2

            希望对你有帮助。

            问候

            【讨论】:

              【解决方案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

              【讨论】:

                猜你喜欢
                • 2015-04-12
                • 2017-05-14
                • 2011-07-14
                • 1970-01-01
                • 1970-01-01
                • 2015-05-07
                • 2017-09-05
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多