我目前正在尝试使用CUDA 9.0RC编译OpenCV 3.3,但无法完成所有工作。 (在Windows上编译,使用CMake 3.9和Visual Studio 2017,适用于x64 Windows)
首先,如果我尝试在没有CUDA的情况下编译OpenCV,一切正常。
之后,我添加了" WITH CUDA" CMake中的选项,包含所有正确的路径,Visual Studio给出了这个错误:
9>------ Build started: Project: opencv_world, Configuration: Release x64 ------
9>Building NVCC (Device) object modules/world/CMakeFiles/cuda_compile.dir/__/core/src/cuda/Release/cuda_compile_generated_gpu_mat.cu.obj
9>nvcc fatal : Unsupported gpu architecture 'compute_20'
9>CMake Error at cuda_compile_generated_gpu_mat.cu.obj.cmake:206 (message):
9> Error generating
9> C:/OpenCV-3.3.0/opencv-3.3.0/build/modules/world/CMakeFiles/cuda_compile.dir/__/core/src/cuda/Release/cuda_compile_generated_gpu_mat.cu.obj
认为它是一个" ARCH"问题,我试图改变,在CMake中:
CUDA_ARCH_BIN : 2.0 3.0 3.5 3.7 5.0 5.2 6.0 6.1
到:
CUDA_ARCH_BIN : 6.0 6.1
(因为我使用的是1080)
和Visual Studio现在给我这个错误:
6>------ Build started: Project: opencv_world, Configuration: Release x64 ------
6>Building NVCC (Device) object modules/world/CMakeFiles/cuda_compile.dir/__/core/src/cuda/Release/cuda_compile_generated_gpu_mat.cu.obj
6>gpu_mat.cu
6>'bin' is not recognized as an internal or external command,
6>operable program or batch file.
6>CMake Error at cuda_compile_generated_gpu_mat.cu.obj.cmake:206 (message):
6> Error generating
6> C:/OpenCV-3.3.0/opencv-3.3.0/build/modules/world/CMakeFiles/cuda_compile.dir/__/core/src/cuda/Release/cuda_compile_generated_gpu_mat.cu.obj
我不知道这个" bin"是来自,我真的不知道我应该做些什么才能让它发挥作用..
谢谢你的回复!
答案 0 :(得分:9)
错误是因为主机编译器的路径错误。它在CMake中指定为CUDA_HOST_COMPILER
:$(VCInstallDir)/bin
。由于这是文件夹的路径(实际上它是一个非现有文件夹),而不是exe,因此构建失败。
这可能是因为MSVC 2017有一条新的,更复杂的bin
文件夹路径。它曾经是:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
新路径是这样的,并且会根据您拥有的MSVC版本而有所不同:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64
更多信息here。这个变化有一个很好的逻辑论据,但它可能打破了大量尚未更新的构建脚本。
您可以通过将变量设置为强制来强制它,例如:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\cl.exe
您可能会收到目标操作系统不受支持的错误(即使它应该与CUDA 9一起使用)。
7>nvcc fatal : Host compiler targets unsupported OS.
这有两个fixes。
1)如果你有最新的MSVC 2017,你需要诱骗CUDA接受它,因为它的版本是1911,而不是1910年。
打开C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include\crt\host_config.h
并找到以下行:
#if _MSC_VER < 1600 || _MSC_VER > 1910
将1910
更改为1911
。
2)在CMake中,将--cl-version=2017
添加到CUDA_NVCC_FLAGS
。我不确定是否需要,但它不会受到伤害。
这对我来说似乎已经成功了。您可能还需要禁用性能测试。您还会发现ncuvid.h
目前还不存在,无论是否改变位置我都不知道。这可以防止构建opencv_cudacodec
,但我怀疑这对大多数人来说不是问题。
答案 1 :(得分:0)
我不得不做几件事来获得VS 2017 + Cuda 9.0 + OpenCV 3.3.0 + CMake 3.10.0-rc2:
https://devtalk.nvidia.com/default/topic/1024631/cuda-9-opencv-gt-building-errors/
基本上,您必须在Cuda 9中添加较新的npp库...请记住遵循这些说明时,nppic需要阅读nppicc。
修改saturate_cast.hpp以使用cuda 9处理__half中的更改,也在该文档中。
运行cmake,并确保: 一个。 WITH_CUBLAS已被选中 湾CUDA_NVCC_FLAGS设置为“--cl-version = 2017” C。 CUDA_HOST_COMPILER设置为系统“cl.exe”所在的位置。 (可能是c:\ program files(x86)\ Microsoft Visual Studio \ 2017 \ enterprise ...“ (不要忘记上面的行需要使用FORWARD斜杠,而不是向后!)
按配置,然后按生成
你会收到很多错误。我不知道为什么,在Windows + Visual Studio中它们似乎是不可避免的。