2017-08-28 130 views
3

我目前正在嘗試使用CUDA 9.0RC編譯OpenCV 3.3,但無法完成所有工作。 (在Windows上編譯,用CMake 3.9和Visual Studio 2017,用於x64 Windows)使用CUDA 9.0RC編譯OpenCV 3.3

首先,如果我嘗試在沒有CUDA的情況下編譯OpenCV,那麼一切正常。

在那之後,我加入C進行「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 

想這是一個「牌坊」的問題,我試着改變,在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 

我不知道這個「箱子」是由正在添加的,我真的不知道我應該怎樣做才能使其發揮作用。 。

感謝您的回覆!

+1

在CUDA 9.0輾轉在計算能力2.x的支持,之後是在CUDA 8.0中不推薦使用,這是您的第一個錯誤。如果您從架構列表中刪除「2.0」來構建?會發生什麼情況?您應該b通過研究CMAKE(一個功能強大的混淆工具)的輸出,能夠找出「bin」來自哪裏:推測它是不正確構建的路徑的一部分,因此被視爲可執行文件的調用。 – njuffa

+0

從ARCH Build中移除2.0可以解決第一個錯誤,但是後來給了我第二個錯誤。我已經設法將這個錯誤視爲weel(這確實是一個路徑問題),但現在當我試圖編譯OpenCV時,它抱怨「__half2float()」沒有聲明..我盡我所能,但不能找到答案... – TmZn

回答

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

您可能會得到一個錯誤目標OS不支持(即使它應該與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

變化19101911

2)在CMake中,將--cl-version=2017添加到CUDA_NVCC_FLAGS。我不確定是否需要,但不會傷害。

這似乎已經爲我做了詭計。您可能還需要禁用性能測試。您還會發現ncuvid.h目前不存在,無論是否改變位置,我都不知道。這可以防止建築opencv_cudacodec,但我懷疑這對大多數人來說不是問題。

+0

我發現我必須在cl.exe的路徑上使用正斜槓。想知道爲什麼它有所作爲 –

+0

@ericfrazer我想這是Windows中轉義序列的常見問題。雙反斜槓也應該起作用。 – Josh

0

我不得不做幾件事情讓VS 2017年+ 9.0 Cuda的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/

基本上,你必須添加新的NPP庫中Cuda的9 ...下面的指令時,nppic需要讀取nppicc記住。

  1. 修改saturate_cast.hpp以處理__half與cuda 9中的更改,該更改也在該文檔中。

  2. 運行cmake,並確保: a。 b檢查WITH_CUBLAS 。 CUDA_NVCC_FLAGS設置爲「--cl-version = 2017」 c。 CUDA_HOST_COMPILER設置爲系統「cl.exe」所在的位置。 (可能爲C:\ Program Files文件(x86)的\微軟的Visual Studio \ 2017年\企業......」 (別忘了上面的行需要使用正斜槓,而不是向後看)

  3. 出版社然後配置生成

你會得到錯誤的很多,我不知道爲什麼,他們似乎在Windows + Visual Studio中不可避免的。