使用CUDA支持构建OpenCV
Im使用CMake生成visual studio 2013解决方案。下一步我将尝试构建它,但出现以下错误: 构建NVCC(设备)对象模块/core/CMakeFiles/cuda_compile.dir/src/cuda/Debug/cuda_compile_生成的gpu_mat.cu.obj nvcc致命:不支持的gpu体系结构“compute_11” 我尝试使用cuda 6.5和7.0版本2.10和3.0。使用CUDA支持构建OpenCV,opencv,cuda,Opencv,Cuda,Im使用CMake生成visual studio 2013解决方案。下一步我将尝试构建它,但出现以下错误: 构建NVCC(设备)对象模块/core/CMakeFiles/cuda_compile.dir/src/cuda/Debug/cuda_compile_生成的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
CUDA_ARCH_BIN设置为:1.1 1.2 1.3 2.0 2.1(2.0)3.0 3.5使用cmake to do配置时,将选项CUDA_GENERATION设置为特定于您的GPU架构。我遇到了同样的错误,并试图解决这个问题。继云的回答(无法留下评论)之后,这对我来说很有效,并且显示了CUDA_一代的可能价值。:
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。)谢谢
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..
这让我可以安装opencv-2.4.9
如果您想了解更多详细信息,请选中此项。另一个选项。
Ubuntu 14.04,GTX泰坦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
,但没有检测到Maxwell。在安装补丁之前,我没有尝试过CUDA_GENERATION=Auto
,这就是我不确定的原因。你应该设置cmake
这些条目CUDA_ARCH_BIN=3.2
和CUDA_ARCH_PTX=3.2
希望能有帮助
这是因为您的gpu类型不匹配 您必须明确定义CUDA_生成 在我这边,我可以找到三种类型的CUDA_世代;自动,开普勒,费米
当我将CUDA_GENERATION设置为开普勒时,compute_11更改为compute_30并成功构建。
cmake-D cmake_build_TYPE=Release-D cmake_INSTALL_PREFIX=/usr/local-D build_TIFF=ON-D build\u EXAMPLES=ON-D CUDA_GENERATION=Kepler-D build\u NEW\u PYTHON\u SUPPORT=ON代码>
为我工作的OpenCV 2.4.11您可以使用CUDA_GENERATION
为您的GPU体系结构指定相应的生成代码名
下面是解析CUDA\u生成
值的相关函数:
set(\uuuucuda\uarch\uptx“”)
if(CUDA_世代“费米”)
套装(uuu cuda_uarch_ubin“2.0”)
elseif(CUDA_GENERATION STREQUAL“开普勒”)
套装(“3.0 3.5 3.7”)
elseif(第二代“麦克斯韦”)
套装(uuu cuda_uarch_ubin“5.0 5.2”)
elseif(CUDA_GENERATION STREQUAL“Pascal”)
套装(“6.0 6.1”)
elseif(CUDA_GENERATION STREQUAL“Volta”)
套装(“7.0”)
elseif(CUDA_GENERATION STREQUAL“自动”)
执行\u进程(命令“${CUDA\u NVCC\u EXECUTABLE}”${CUDA\u NVCC\u FLAGS}”${OpenCV\u SOURCE\u DIR}/cmake/checks/OpenCVDetectCudaArch.cu”“--run”
工作目录“${CMAKE\u BINARY\u DIR}${CMAKE\u FILES\u DIRECTORY}/CMakeTmp/”
结果变量nvcc res输出变量nvcc out
错误\u安静输出\u带\u尾随\u空白)
如果(不等于0)
消息(状态“自动检测CUDA生成失败。将为所有已知体系结构生成。”)
else()
集合(${nvcc\u out})
字符串(替换“2.1”、“2.1(2.0)”\uuuuCuda\uArch\uBin“${uuuuuCuda\uArch\uBin}”)
endif()
endif()
wikipedia CUDA页面有一个很好的表格,用于将您的视频卡映射到正确的微体系结构代码名(抱歉,它太大了,无法在此处复制):
例如,我的middling-2012 Macbook Pro有一个古董GeForce GT 650M,wikipedia表显示它使用了开普勒微体系结构。因此,我在cmake命令行中使用此命令:
cmake-D CUDA_GENERATION=“开普勒”…
opencv脚本在显示配置摘要时将其转换为“3.0 3.5 3.7”,并将相应的标志传递给nvcc
在我的例子中,在正确设置之前,我遇到了关于compute\u 70
不受支持的错误。显然,截至今天(2017-10-07),仍有一个关于自动检测无法正常工作的问题。感谢您回答这个问题。然而,这只是一个链接的答案;最好在你的答案中包含更详细的描述,以及你所指链接中的信息。为什么要构建tiff?@user136266,因为我所做的一些处理是与tiff相关的。它们通常用于地理空间数据、光栅等。