試行錯誤でかなり苦労したので、これで動いてますというメモ。
作業環境
ハードウェア
Windows 7 世代のノートPC。
- Intel i7 3rd-Gen リアル4コア:疑似8コア DRAM 8GB
- NVIDIA GeForce GT 650M
ソフトウェア
- MS Windows 10 pro 64 bit (最新)
- MS Visual Studio 2013 Pro Update 2 (OpenCVとCUDAの対応指定による)
- NVIDIA CUDA Toolkit 7.5 / 7.0 (安定版の最新/一世代前)
- CMake 3.5.2 (最新)
ライブラリー
- OpenCV 2.4.13 (2系の最新、2系指定は本稿作業要件による)
- Qt 5.7 Open Source (最新)
- Eigen 3.2.8 (最新)
- Intel TBB 4.4 Update 5 (最新)
作業手順
CMake-GUI にて、Configure / Generate 。
最終的に下記指定内容となったが、試行錯誤の結果であり、論理的ではないかも。
所要時間が長いので、DOCS と EXAMPLES は除外した。
Qt は出来合いのパッケージをそのまま参照している。
--
-- General configuration for OpenCV 2.4.13 =====================================
-- Version control: unknown
--
-- Platform:
-- Host: Windows 10.0.10586 AMD64
-- CMake: 3.5.2
-- CMake generator: Visual Studio 12 2013 Win64
-- CMake build tool: C:/Program Files (x86)/MSBuild/12.0/bin/MSBuild.exe
-- MSVC: 1800
--
-- C/C++:
-- Built as dynamic libs?: YES
-- C++ Compiler: C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/x86_amd64/cl.exe (ver 18.0.40629.0)
-- C++ flags (Release): /DWIN32 /D_WINDOWS /W4 /GR /EHa /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi /wd4251 /wd4275 /wd4589 /wd4359 /wd4819 /MD /O2 /Ob2 /D NDEBUG /Zi
-- C++ flags (Debug): /DWIN32 /D_WINDOWS /W4 /GR /EHa /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi /wd4251 /wd4275 /wd4589 /wd4359 /wd4819 /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1
-- C Compiler: C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/x86_amd64/cl.exe
-- C flags (Release): /DWIN32 /D_WINDOWS /W3 /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi /MD /O2 /Ob2 /D NDEBUG /Zi
-- C flags (Debug): /DWIN32 /D_WINDOWS /W3 /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1
-- Linker flags (Release): /machine:x64 /INCREMENTAL:NO /debug
-- Linker flags (Debug): /machine:x64 /debug /INCREMENTAL
-- Precompiled headers: YES
--
-- OpenCV modules:
-- To be built: core flann imgproc highgui features2d calib3d ml video legacy objdetect photo gpu ocl nonfree contrib stitching superres ts videostab
-- Disabled: world
-- Disabled by dependency: -
-- Unavailable: androidcamera dynamicuda java python viz
--
-- Windows RT support: NO
--
-- GUI:
-- QT 5.x: YES (ver 5.7.0)
-- QT OpenGL support: YES (Qt5::OpenGL 5.7.0)
-- OpenGL support: YES (glu32 opengl32)
-- VTK support: NO
--
-- Media I/O:
-- ZLib: build (ver 1.2.7)
-- JPEG: libjpeg (ver 62)
-- PNG: build (ver 1.5.12)
-- TIFF: build (ver 42 - 4.0.2)
-- JPEG 2000: build (ver 1.900.1)
-- OpenEXR: build (ver 1.7.1)
--
-- Video I/O:
-- Video for Windows: YES
-- DC1394 1.x: NO
-- DC1394 2.x: NO
-- FFMPEG: YES (prebuilt binaries)
-- codec: YES (ver 55.18.102)
-- format: YES (ver 55.12.100)
-- util: YES (ver 52.38.100)
-- swscale: YES (ver 2.3.100)
-- resample: NO
-- gentoo-style: YES
-- OpenNI: NO
-- OpenNI PrimeSensor Modules: NO
-- PvAPI: NO
-- GigEVisionSDK: NO
-- DirectShow: YES
-- Media Foundation: NO
-- XIMEA: NO
-- Intel PerC: NO
--
-- Other third-party libraries:
-- Use IPP: NO
-- Use Eigen: YES (ver 3.2.8)
-- Use TBB: YES (ver 4.4 interface 9005)
-- Use OpenMP: NO
-- Use GCD NO
-- Use Concurrency NO
-- Use C=: NO
-- Use Cuda: YES (ver 7.5) 【7.0】
-- Use OpenCL: YES
--
-- NVIDIA CUDA
-- Use CUFFT: YES
-- Use CUBLAS: YES
-- USE NVCUVID: NO
-- NVIDIA GPU arch: 20 21 30 35 【30 35】
-- NVIDIA PTX archs: 30 【-】
-- Use fast math: NO 【YES】
-- Tiny gpu module: NO
--
-- OpenCL:
-- Version: dynamic
-- Include path: C:/DevCPP/OpenCV2413/sources/3rdparty/include/opencl/1.2
-- Use AMD FFT: NO
-- Use AMD BLAS: NO
--
-- Python:
-- Interpreter: NO
--
-- Java:
-- ant: NO
-- JNI: NO
-- Java tests: NO
--
-- Tests and samples:
-- Tests: YES 【NO】
-- Performance tests: YES 【NO】
-- C/C++ Examples: NO
--
-- Install path: C:/DevCPP/OpenCV2413/buildCUDA/install
--
-- cvconfig.h is in: C:/DevCPP/OpenCV2413/buildCUDA
-- -----------------------------------------------------------------
--
CMakeにより生成された OpenCV.sln を処理。
OpenCV TEST を含み、対象CUDAコアアーキテクチャーを無指定とした場合の所要時間は4時間超、 TESTはOpenCVのバージョンによってはコンパイルリンク時エラーになることが多かったような記憶だが、この版、この手順では問題なく通った。ただし所要時間が長いのは確かで、あっさり外したほうが良いかも。
この後、GPUに関わるサンプルプログラムを実行し、CUDAコア群にアクセスしていることを確認する。
標準サンプルでは下記のようなインフォメーションが表示される。
(この例は CUDA 8.0 RC をインストールしている環境での CUDA 7.5 の実行なので、ドライバーが8.0の表示となっている。)
Device 0: "GeForce GT 650M" 2048Mb, sm_30, 384 cores, Driver/Runtime ver.8.0/7.50
この手順では、Build ディレクトリに正常な include ディレクトリが生成されなかったので、Source ディレクトリから手動でコピーした。
参考文献
いろいろ参照したが、下記二稿に多く拠った。
ただし本稿と同様、構成指定の判断理由は明示されていない。
- Neil Z. SHAO's Blog
Sept 25, 2014 OpenCV 2.4.9 + CUDA 6.5 + Visual Studio 2013
https://initialneil.wordpress.com/2014/09/25/opencv-2-4-9-cuda-6-5-visual-studio-2013/
- minus9d's diary
Jan 24, 2013 OpenCV2.4.3をWindowsでビルド
http://minus9d.hatenablog.com/entry/20130124/1359033785
その後、下稿著者からご教示を頂戴した。
- GitHub atinfinity/opencv2.4.10.1_build_vs2012_x64.bat
https://gist.github.com/atinfinity/2ce87cbc5d651b58bee5