2017-08-28 5 views
3

Ich versuche gerade, OpenCV 3.3 mit CUDA 9.0RC zu kompilieren, aber es wird nicht alles schaffen. (Kompilieren unter Windows, mit CMake 3.9 und Visual Studio 2017, für x64 Windows)Kompilieren von OpenCV 3.3 mit CUDA 9.0RC

Zuerst, wenn ich versuche, OpenCV ohne CUDA zu kompilieren, funktioniert alles gut.

Danach habe ich die "CUDA" Option in CMake hinzugefügt, mit all den richtigen Pfaden und Visual Studio geben Sie mir diesen Fehler:

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 

Denken es ein "ARCH" Problem ist, habe ich versucht, ändern, in CMake:

CUDA_ARCH_BIN : 2.0 3.0 3.5 3.7 5.0 5.2 6.0 6.1 

zu:

CUDA_ARCH_BIN : 6.0 6.1 

(Da ich bin mit einem 1080)

und Visual Studio gibt mir jetzt diesen Fehler:

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 

Ich weiß nicht, wo diese „ist“ von steht vor der Tür, und ich weiß wirklich nicht, was ich tun soll es funktionieren zu lassen.

Danke für Ihre Antworten!

+1

Unterstützung für 2.x Rechenkapazität entfernt wurde in CUDA 9.0, nachdem sie In CUDA 8.0 veraltet, also dein erster Fehler.Was passiert, wenn du nur '2.0' aus der Liste der zu erstellenden Architekturen entfernst? Ich bin in der Lage herauszufinden, woher der 'bin' kommt, indem ich die Ausgabe von CMAKE (einem mächtigen Verschleierungstool) untersuche: Vermutlich ist es Teil eines falsch konstruierten Pfades, der daher als Aufruf einer ausführbaren Datei behandelt wird. – njuffa

+0

Entfernen von 2.0 aus dem ARCH Build funktionierte für den ersten Fehler, aber gab mir dann den zweiten. Ich habe es geschafft, diesen Fehler zu überwinden (es war in der Tat ein Pfadproblem), aber jetzt, wenn ich versuche, OpenCV zu kompilieren, beschweren sie sich über "__half2float()" nicht erklärt .. Ich versuchte mein Bestes, konnte aber nicht finde die Antwort ... – TmZn

Antwort

9

Der Fehler liegt daran, dass der Pfad zum Host-Compiler falsch ist. Es ist in CMake als CUDA_HOST_COMPILER: $(VCInstallDir)/bin angegeben. Da dies ein Pfad zu einem Ordner ist (in Wirklichkeit ist es ein nicht existierender Ordner) und nicht eine Exe, schlägt der Build fehl.

Dies ist wahrscheinlich, weil MSVC 2017 einen neuen, viel mehr gewundenen Pfad zum Ordner bin hat. Früher war es so:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

Der neue Pfad in etwa so ist, und variieren je nachdem, welche Version von MSVC Sie haben:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64

Mehr Infos here. Es gibt ein gutes logisches Argument für die Änderung, aber es ist wahrscheinlich eine Menge Build-Skripte gebrochen, die noch nicht aktualisiert wurden.

können Sie Brute es erzwingen, indem Sie die Variable Einstellung, zum Beispiel:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\cl.exe

Sie können eine Fehlermeldung erhalten, dass das Ziel-Betriebssystem nicht unterstützt wird (obwohl es mit CUDA 9 sein sollte).

7>nvcc fatal : Host compiler targets unsupported OS.

Es gibt zwei fixes dafür.

1) Wenn Sie das neueste MSVC 2017 haben, müssen Sie CUDA dazu bringen, es anzunehmen, weil es Version 1911, nicht 1910 ist.

Öffnen Sie C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include\crt\host_config.h und finden Sie diese Zeile:

#if _MSC_VER < 1600 || _MSC_VER > 1910

ändern 1910-1911.

2) Fügen Sie in CMake --cl-version=2017 zu CUDA_NVCC_FLAGS hinzu. Ich bin mir nicht sicher, ob es erforderlich ist, aber es wird nicht weh tun.

Das scheint den Trick für mich getan zu haben. Möglicherweise müssen Sie auch Perf-Tests deaktivieren. Sie werden auch feststellen, dass ncuvid.h im Moment nicht existiert, ob der Standort geändert wurde oder nicht, weiß ich nicht. Dies verhindert, opencv_cudacodec Gebäude, aber ich vermute, das ist kein Problem für die meisten Menschen.

+0

Ich fand, dass ich Schrägstriche auf dem Pfad für cl.exe verwenden muss. frage mich, warum es einen Unterschied macht –

+0

@ericfrazer Ich denke, es ist das übliche Problem mit Escape-Sequenzen in Windows. Double Backslash sollte auch funktionieren. – Josh

0

Ich habe einige Dinge zu tun hatte, VS 2017 + Cuda 9.0 + OpenCV 3.3.0 + CMake 3.10.0-RC2 zu erhalten:

  1. Ändern \ cmake \ FindCuda.cmake pro Anweisungen hier:

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

Grundsätzlich müssen Sie die neuere NPP Bibliotheken in Cuda 9 ... beachten Sie hinzufügen, wenn diese Anweisungen befolgen, nppic nppicc lesen muss.

  1. Ändern Sie saturate_cast.hpp, um die Änderungen in __half mit cuda 9 zu bearbeiten, auch in diesem Dokument.

  2. run cmake und sicherstellen, dass: a. WITH_CUBLAS ist geprüft b. CUDA_NVCC_FLAGS auf "--cl-version = 2017" gesetzt c. CUDA_HOST_COMPILER wird auf den Speicherort der Datei "cl.exe" festgelegt. (wahrscheinlich c: \ Programme (x86) \ Microsoft Visual Studio \ 2017 \ Unternehmen ...“ (Sie die Zeile oben nicht vergessen, muss FORWARD verwenden Schrägstriche, nicht rückwärts)

  3. Press Configure dann generieren

Sie werden eine Menge von Fehlern bekommen. ich weiß nicht, warum sie in Windows + Visual Studio unvermeidbar scheinen.

Verwandte Themen