我使用CMake生成visual studio 2013解决方案。接下来我尝试构建它,但得到以下错误:
构建NVCC(设备)对象模块/ 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
答案 0 :(得分:20)
另一种选择。 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
,但麦克斯韦未被检测到。我没有在补丁之前尝试CUDA_GENERATION=Auto
,这就是为什么我不确定。
答案 1 :(得分:13)
使用cmake进行配置时,请将 CUDA_GENERATION 选项设置为特定的GPU架构。我遇到了同样的错误并试图解决问题。
答案 2 :(得分:10)
跟进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。)
答案 3 :(得分:6)
您可以使用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
例如,我的middling-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)仍有open issue in the opencv tracker关于自动检测不正常的情况。
答案 4 :(得分:4)
谢谢,
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..
这让我安装opencv-2.4.9。
如果您想了解更多详细信息,请查看link。
答案 5 :(得分:3)
这是因为你的gpu类型不匹配。
您必须明确定义CUDA_GENERATION。
在我身边,我可以找到3种类型的CUDA_GENERATION; Auto,Kepler,Fermi。
当我将CUDA_GENERATION设置为Kepler时,compute_11更改为compute_30并构建成功。
答案 6 :(得分:2)
您应该使用cmake
这些条目CUDA_ARCH_BIN = 3.2
和CUDA_ARCH_PTX = 3.2
希望它有所帮助。
此致
答案 7 :(得分:1)
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 ..
worked for me for OpenCV 2.4.11