Compiling OpenCV 3.3 with CUDA 9.0RC

Compiling OpenCV 3.3 with CUDA 9.0RC

本文关键字:0RC CUDA with OpenCV Compiling      更新时间:2023-10-16

我目前正在尝试用CUDA 9.0RC编译OpenCV 3.3,但无法使其全部工作。(在Windows上编译,使用CMake 3.9和Visual Studio 2017,适用于x64 Windows)

首先,如果我尝试在没有CUDA的情况下编译OpenCV,一切都很好。

之后,我在CMake中添加了"WITH CUDA"选项,并添加了所有正确的路径,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

我不知道这个"垃圾桶"是从哪里来的,我真的不知道该怎么做才能让它工作。。

谢谢你的回复!

错误是因为主机编译器的路径错误。它在CMake中指定为CUDA_HOST_COMPILER:$(VCInstallDir)/bin。由于这是一个文件夹的路径(事实上它是一个不存在的文件夹),而不是exe,因此构建失败。

这可能是因为MSVC 2017有一个新的、更复杂的bin文件夹路径。它曾经是:

C:Program Files (x86)Microsoft Visual Studio 14.0VCbin

新的路径是这样的,并且会根据您拥有的MSVC版本而有所不同:

C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.11.25503binHostX64x64

点击此处了解更多信息。这一变化有一个很好的逻辑论据,但它可能破坏了大量尚未更新的构建脚本。

您可以通过将变量设置为(例如:)来强制执行

C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.11.25503binHostX64x64cl.exe

您可能会收到不支持目标操作系统的错误(即使它应该与CUDA 9一起使用)。

7>nvcc fatal : Host compiler targets unsupported OS.

对此有两种修复方法。

1) 如果你有最新的MSVC 2017,你需要欺骗CUDA接受它,因为它是1911版,而不是1910版。

打开C:Program FilesNVIDIA GPU Computing ToolkitCUDAv9.0includecrthost_config.h,找到这行:

#if _MSC_VER < 1600 || _MSC_VER > 1910

1910更改为1911

2) 在CMake中,将--cl-version=2017添加到CUDA_NVCC_FLAGS。我不确定是否需要,但不会有什么坏处。

这对我来说似乎已经成功了。你可能还需要禁用性能测试。你也会发现ncuvid.h目前并不存在,我不知道它是否改变了位置。这阻止了构建opencv_cudacodec,但我怀疑这对大多数人来说不是问题。

我必须做几件事才能获得VS 2017+Cuda 9.0+OpenCV 3.3.0+CMake 3.10.0-rc2:

  1. 按照此处的说明修改\cmake\FindCuda.cmake:

https://devtalk.nvidia.com/default/topic/1024631/cuda-9-opencv-gt-building-errors/

基本上,您必须在Cuda 9中添加更新的npp库…请记住,在遵循这些说明时,nppic需要阅读nppicc。

  1. 修改satellite_cast.hpp以处理__half中的更改,也在该文档中。

  2. 运行cmake,并确保:a.检查WITH_CUBLASb.CUDA_NVCC_FLAGS设置为"--cl版本=2017"c.CUDA_HOST_COMPLER设置为系统"cl.exe"所在的位置。(可能是c:\program files(x86)\Microsoft Visual Studio\2017\enterprise。。。"(别忘了上面的行需要使用FORWARD斜线,而不是倒斜线!)

  3. 按配置,然后生成

你会得到很多错误。我不知道为什么,它们在Windows+Visual Studio中似乎是不可避免的。