#contents
*概要 [#a245f1a3]
-まさかの3.0リリース前に2.4.10.1がリリースされた (2014-11-06)
-ターゲットはWindows 7 (64bit)
-OpenCVのバージョンは2.4.10.1
-ビルド環境はVS2012
-CMakeのバージョンは3.0.1
-今回はGitでソースコードを取ってくる
*ソースコードのダウンロード [#sd71f0ca]
-git でリポジトリをクローンしてくる。URL は git://code.opencv.org/opencv.git
git clone git://code.opencv.org/opencv.git
-リポジトリがcloneされるのを待つ
-取得したリポジトリから、ブランチの2.4.10.1にスイッチする
-今回はWindowsのTortoiseGitを使ったので、添付図の様に、TortoiseGit→Switch/Checkoutを選択
#ref(OpenCV2.4.10のビルド/switch_checkout_git.png)
-Switch To で Branch の横の参照ボタンをクリックし、Browse references を表示する
#ref(OpenCV2.4.10のビルド/branch_select.png)
-tags から、2.4.10.1を選択
-Switchされるのを待つ(12121ms)
#ref(switch-checkout_2_4_10_1.png)
*ビルド前準備 [#k7f0402a]
-リポジトリは予め適当な場所に移動させる
-cmakeでソリューションファイルを作成する
-cmake(GUI版を起動する)
-Sourceの場所を指定する
--今回はD:\OpenCV2410
-Buildの場所を指定する
--今回は D:\OpenCV2410\build を指定する。
-Configureボタンを押す
-D:\OpenCV2410\build が無いと文句を言われるので、ディレクトリの作成に同意する
-コンパイラのバージョンを聞かれるので、Visual Studio 2012を指定する
--違うコンパイラを指定する場合はここでターゲットを変更する
--Visual Studio 2010→VS10
--Visual Studio 2012→VS11
--Visual Studio 2013→VS12
--と、微妙に表記と数字がずれるので注意
-Configureボタンを押す
--Warningがわんさか出たが、無視する
-Generateボタンを押す
#ref(opencv_24101_cmake.png)
--Warningがわんさか出たが、無視する
-D:\OpenCV2410\build\OpenCV.sln が作成される。
*ソースコードのビルド [#s17294b7]
-前のステップまでで生成されたOpenCV.sln を Visual Studio 2012で開く
-大量にプロジェクトが読み込まれるので、バッチビルドする。
-ビルド(B)→バッチビルド(T)でバッチビルド画面を出す
-バッチビルドでALL_BUILDのdebug/release両方を選択する
#ref(batch_build_2_4_10_1.png)
-今回は5時間31分ぐらいビルドに要した
*インストール [#a3fdbe8e]
-INSTALLプロジェクトをビルドするとインストールされる
-詳細は割愛
*OpenCVビルド時のコンフィグなど [#c2e72343]
**cvconfig.h [#cf11dbd0]
/* OpenCV compiled as static or dynamic libs */
#define BUILD_SHARED_LIBS
/* Compile for 'real' NVIDIA GPU architectures */
#define CUDA_ARCH_BIN " 11 12 13 20 21 30 35"
/* Create PTX or BIN for 1.0 compute capability */
/* #undef CUDA_ARCH_BIN_OR_PTX_10 */
/* NVIDIA GPU features are used */
#define CUDA_ARCH_FEATURES " 11 12 13 20 20 30 35 30"
/* Compile for 'virtual' NVIDIA PTX architectures */
#define CUDA_ARCH_PTX " 30"
/* AVFoundation video libraries */
/* #undef HAVE_AVFOUNDATION */
/* V4L capturing support */
/* #undef HAVE_CAMV4L */
/* V4L2 capturing support */
/* #undef HAVE_CAMV4L2 */
/* Carbon windowing environment */
/* #undef HAVE_CARBON */
/* AMD's Basic Linear Algebra Subprograms Library*/
/* #undef HAVE_CLAMDBLAS */
/* AMD's OpenCL Fast Fourier Transform Library*/
/* #undef HAVE_CLAMDFFT */
/* Cocoa API */
/* #undef HAVE_COCOA */
/* C= */
/* #undef HAVE_CSTRIPES */
/* NVidia Cuda Basic Linear Algebra Subprograms (BLAS) API*/
/* #undef HAVE_CUBLAS */
/* NVidia Cuda Runtime API*/
#define HAVE_CUDA
/* NVidia Cuda Fast Fourier Transform (FFT) API*/
#define HAVE_CUFFT
/* IEEE1394 capturing support */
/* #undef HAVE_DC1394 */
/* IEEE1394 capturing support - libdc1394 v2.x */
/* #undef HAVE_DC1394_2 */
/* DirectShow Video Capture library */
#define HAVE_DSHOW
/* Eigen Matrix & Linear Algebra Library */
/* #undef HAVE_EIGEN */
/* FFMpeg video library */
#define HAVE_FFMPEG
/* ffmpeg's libswscale */
#define HAVE_FFMPEG_SWSCALE
/* ffmpeg in Gentoo */
#define HAVE_GENTOO_FFMPEG
/* GStreamer multimedia framework */
/* #undef HAVE_GSTREAMER */
/* GTK+ 2.0 Thread support */
/* #undef HAVE_GTHREAD */
/* Windows Runtime support */
/* #undef HAVE_WINRT */
/* Win32 UI */
#define HAVE_WIN32UI
/* GTK+ 2.x toolkit */
/* #undef HAVE_GTK */
/* Apple ImageIO Framework */
/* #undef HAVE_IMAGEIO */
/* Intel Perceptual Computing SDK library */
/* #undef HAVE_INTELPERC */
/* Intel Integrated Performance Primitives */
/* #undef HAVE_IPP */
/* JPEG-2000 codec */
#define HAVE_JASPER
/* IJG JPEG codec */
#define HAVE_JPEG
/* libpng/png.h needs to be included */
/* #undef HAVE_LIBPNG_PNG_H */
/* V4L/V4L2 capturing support via libv4l */
/* #undef HAVE_LIBV4L */
/* Microsoft Media Foundation Capture library */
/* #undef HAVE_MSMF */
/* NVidia Video Decoding API*/
/* #undef HAVE_NVCUVID */
/* OpenCL Support */
#define HAVE_OPENCL
/* #undef HAVE_OPENCL_STATIC */
/* OpenEXR codec */
#define HAVE_OPENEXR
/* OpenGL support*/
/* #undef HAVE_OPENGL */
/* OpenNI library */
/* #undef HAVE_OPENNI */
/* PNG codec */
#define HAVE_PNG
/* Qt support */
/* #undef HAVE_QT */
/* Qt OpenGL support */
/* #undef HAVE_QT_OPENGL */
/* QuickTime video libraries */
/* #undef HAVE_QUICKTIME */
/* QTKit video libraries */
/* #undef HAVE_QTKIT */
/* Intel Threading Building Blocks */
/* #undef HAVE_TBB */
/* TIFF codec */
#define HAVE_TIFF
/* Unicap video capture library */
/* #undef HAVE_UNICAP */
/* Video for Windows support */
#define HAVE_VFW
/* V4L2 capturing support in videoio.h */
/* #undef HAVE_VIDEOIO */
/* Win32 UI */
#define HAVE_WIN32UI
/* XIMEA camera support */
/* #undef HAVE_XIMEA */
/* Xine video library */
/* #undef HAVE_XINE */
/* Define if your processor stores words with the most significant byte
first (like Motorola and SPARC, unlike Intel and VAX). */
/* #undef WORDS_BIGENDIAN */
**version_string.inc [#eadafbc4]
General configuration for OpenCV 2.4.10.1 =====================================
Version control: 2.4.10.1
Platform:
Host: Windows 6.1 AMD64
CMake: 3.0.1
CMake generator: Visual Studio 11 2012
CMake build tool: C:/Windows/Microsoft.NET/Framework/v4.0.30319/MSBuild.exe
MSVC: 1700
C/C++:
Built as dynamic libs?: YES
C++ Compiler: C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin/cl.exe (ver 17.0.61030.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 /arch:SSE2 /Oi /fp:fast /wd4251 /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 /arch:SSE2 /Oi /fp:fast /wd4251 /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1
C Compiler: C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin/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 /arch:SSE2 /Oi /fp:fast /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 /arch:SSE2 /Oi /fp:fast /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1
Linker flags (Release): /machine:X86 /INCREMENTAL:NO /debug
Linker flags (Debug): /machine:X86 /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: NO
Win32 UI: YES
OpenGL support: NO
VTK support: NO
Media I/O:
ZLib: build (ver 1.2.7)
JPEG: build (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)
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: NO
Use TBB: NO
Use OpenMP: NO
Use GCD NO
Use Concurrency YES
Use C=: NO
Use Cuda: YES (ver 5.5)
Use OpenCL: YES
NVIDIA CUDA
Use CUFFT: YES
Use CUBLAS: NO
USE NVCUVID: NO
NVIDIA GPU arch: 11 12 13 20 21 30 35
NVIDIA PTX archs: 30
Use fast math: NO
OpenCL:
Version: dynamic
Include path: D:/OpenCV2410/3rdparty/include/opencl/1.2
Use AMD FFT: NO
Use AMD BLAS: NO
Python:
Interpreter: NO
Java:
ant: NO
JNI: C:/Program Files (x86)/Java/jdk1.7.0_07/include C:/Program Files (x86)/Java/jdk1.7.0_07/include/win32 C:/Program Files (x86)/Java/jdk1.7.0_07/include
Java tests: NO
Documentation:
Build Documentation: NO
Sphinx: NO
PdfLaTeX compiler: NO
Tests and samples:
Tests: YES
Performance tests: YES
C/C++ Examples: NO
Install path: D:/OpenCV2410/build/install
cvconfig.h is in: D:/OpenCV2410/build
-----------------------------------------------------------------
*ビルドされたReleaseのdll 一覧 [#h6727638]
2014/11/19 12:05 4,262,400 opencv_core2410.dll
2014/11/19 12:05 8,866,816 opencv_core2410.pdb
2014/11/19 12:11 1,931,264 opencv_imgproc2410.dll
2014/11/19 12:11 7,310,336 opencv_imgproc2410.pdb
2014/11/19 12:11 526,848 opencv_flann2410.dll
2014/11/19 12:11 5,762,048 opencv_flann2410.pdb
2014/11/19 12:11 2,160,640 opencv_highgui2410.dll
2014/11/19 12:11 9,939,968 opencv_highgui2410.pdb
2014/11/19 12:11 10,535,057 opencv_ffmpeg2410.dll
2014/11/19 12:12 741,888 opencv_features2d2410.dll
2014/11/19 12:12 5,204,992 opencv_features2d2410.pdb
2014/11/19 12:12 1,012,224 opencv_calib3d2410.dll
2014/11/19 12:12 5,606,400 opencv_calib3d2410.pdb
2014/11/19 12:12 509,952 opencv_ml2410.dll
2014/11/19 12:12 2,919,424 opencv_ml2410.pdb
2014/11/19 12:13 364,544 opencv_video2410.dll
2014/11/19 12:13 2,747,392 opencv_video2410.pdb
2014/11/19 12:13 679,424 opencv_objdetect2410.dll
2014/11/19 12:13 6,302,720 opencv_objdetect2410.pdb
2014/11/19 12:13 1,261,056 opencv_legacy2410.dll
2014/11/19 12:13 7,465,984 opencv_legacy2410.pdb
2014/11/19 12:13 200,704 opencv_photo2410.dll
2014/11/19 12:13 2,272,256 opencv_photo2410.pdb
2014/11/19 14:38 379,078,656 opencv_gpu2410.dll
2014/11/19 14:38 56,937,472 opencv_gpu2410.pdb
2014/11/19 17:00 2,066,432 opencv_ocl2410.dll
2014/11/19 17:00 9,997,312 opencv_ocl2410.pdb
2014/11/19 17:01 1,171,968 opencv_nonfree2410.dll
2014/11/19 17:01 5,925,888 opencv_nonfree2410.pdb
2014/11/19 17:11 867,328 opencv_superres2410.dll
2014/11/19 17:11 6,474,752 opencv_superres2410.pdb
2014/11/19 17:20 1,213,952 opencv_contrib2410.dll
2014/11/19 17:20 9,718,784 opencv_contrib2410.pdb
2014/11/19 17:21 1,046,016 opencv_stitching2410.dll
2014/11/19 17:21 8,317,952 opencv_stitching2410.pdb
2014/11/19 17:22 163,840 opencv_haartraining.exe
2014/11/19 17:22 1,453,056 opencv_haartraining.pdb
2014/11/19 17:22 805,376 opencv_perf_calib3d.exe
2014/11/19 17:22 6,974,464 opencv_perf_calib3d.pdb
2014/11/19 17:22 1,710,592 opencv_perf_core.exe
2014/11/19 17:22 16,591,872 opencv_perf_core.pdb
2014/11/19 17:22 945,664 opencv_perf_features2d.exe
2014/11/19 17:22 8,481,792 opencv_perf_features2d.pdb
2014/11/19 17:23 4,862,976 opencv_perf_gpu.exe
2014/11/19 17:23 56,151,040 opencv_perf_gpu.pdb
2014/11/19 17:24 643,072 opencv_perf_highgui.exe
2014/11/19 17:24 4,787,200 opencv_perf_highgui.pdb
2014/11/19 17:24 2,718,720 opencv_perf_imgproc.exe
2014/11/19 17:24 33,139,712 opencv_perf_imgproc.pdb
2014/11/19 17:25 852,480 opencv_perf_nonfree.exe
2014/11/19 17:25 7,564,288 opencv_perf_nonfree.pdb
2014/11/19 17:25 714,752 opencv_perf_objdetect.exe
2014/11/19 17:25 5,975,040 opencv_perf_objdetect.pdb
2014/11/19 17:26 3,122,176 opencv_perf_ocl.exe
2014/11/19 17:26 33,606,656 opencv_perf_ocl.pdb
2014/11/19 17:26 709,120 opencv_perf_photo.exe
2014/11/19 17:26 5,671,936 opencv_perf_photo.pdb
2014/11/19 17:26 812,032 opencv_perf_stitching.exe
2014/11/19 17:26 7,105,536 opencv_perf_stitching.pdb
2014/11/19 17:26 729,088 opencv_perf_superres.exe
2014/11/19 17:26 6,016,000 opencv_perf_superres.pdb
2014/11/19 17:27 916,480 opencv_perf_video.exe
2014/11/19 17:27 8,719,360 opencv_perf_video.pdb
2014/11/19 17:27 23,040 opencv_performance.exe
2014/11/19 17:27 1,133,568 opencv_performance.pdb
2014/11/19 17:27 1,532,928 opencv_test_calib3d.exe
2014/11/19 17:27 9,219,072 opencv_test_calib3d.pdb
2014/11/19 17:27 542,720 opencv_test_contrib.exe
2014/11/19 17:27 4,754,432 opencv_test_contrib.pdb
2014/11/19 17:28 1,953,792 opencv_test_core.exe
2014/11/19 17:28 11,668,480 opencv_test_core.pdb
2014/11/19 17:28 826,368 opencv_test_features2d.exe
2014/11/19 17:28 5,483,520 opencv_test_features2d.pdb
2014/11/19 17:28 549,888 opencv_test_flann.exe
2014/11/19 17:28 4,418,560 opencv_test_flann.pdb
2014/11/19 17:29 7,225,856 opencv_test_gpu.exe
2014/11/19 17:29 74,394,624 opencv_test_gpu.pdb
2014/11/19 17:30 783,360 opencv_test_highgui.exe
2014/11/19 17:30 5,172,224 opencv_test_highgui.pdb
2014/11/19 17:31 1,383,936 opencv_test_imgproc.exe
2014/11/19 17:31 8,481,792 opencv_test_imgproc.pdb
2014/11/19 17:31 722,432 opencv_test_legacy.exe
2014/11/19 17:31 5,524,480 opencv_test_legacy.pdb
2014/11/19 17:31 710,656 opencv_test_ml.exe
2014/11/19 17:31 5,000,192 opencv_test_ml.pdb
2014/11/19 17:31 1,156,096 opencv_test_nonfree.exe
2014/11/19 17:31 9,473,024 opencv_test_nonfree.pdb
2014/11/19 17:31 628,736 opencv_test_objdetect.exe
2014/11/19 17:31 4,992,000 opencv_test_objdetect.pdb
2014/11/19 17:32 4,121,600 opencv_test_ocl.exe
2014/11/19 17:32 38,153,216 opencv_test_ocl.pdb
2014/11/19 17:33 585,728 opencv_test_photo.exe
2014/11/19 17:33 4,353,024 opencv_test_photo.pdb
2014/11/19 17:33 567,808 opencv_test_stitching.exe
2014/11/19 17:33 4,811,776 opencv_test_stitching.pdb
2014/11/19 17:33 572,928 opencv_test_superres.exe
2014/11/19 17:33 4,754,432 opencv_test_superres.pdb
2014/11/19 17:33 717,312 opencv_test_video.exe
2014/11/19 17:33 5,303,296 opencv_test_video.pdb
2014/11/19 17:33 246,784 opencv_traincascade.exe
2014/11/19 17:33 2,345,984 opencv_traincascade.pdb
2014/11/19 17:34 951,808 gpu_perf4au.exe
2014/11/19 17:34 9,530,368 gpu_perf4au.pdb
2014/11/19 17:35 552,960 opencv_videostab2410.dll
2014/11/19 17:35 5,336,064 opencv_videostab2410.pdb
**ビルドに要した時間Top10 [#gab3c46e]
-やはりGPUのカーネル系はビルドに時間がかかるが、それにしても2時間超えって。
-映画かよっ!!
|dllの名前|所要時間(min)|
|opencv_gpu2410.dll|145|
|opencv_ocl2410.dll|142|
|opencv_superres2410.dll|10|
|opencv_contrib2410.dll|9|
|opencv_imgproc2410.dll|6|
|opencv_stitching2410.dll|1|
|opencv_features2d2410.dll|1|
|opencv_video2410.dll|1|
|opencv_videostab2410.dll|1|
|opencv_nonfree2410.dll|1|
-dll以外はビルドが早い。
-もっとも、長いのがgpuモジュールとoclモジュールだけで、ほかは割と早いといえるかもしれないが。
|exeの名前|所要時間(min)|
|opencv_perf_nonfree.exe|1|
|opencv_test_gpu.exe|1|
|opencv_test_ocl.exe|1|
|opencv_perf_gpu.exe|1|
|opencv_perf_highgui.exe|1|
|opencv_perf_video.exe|1|
|opencv_test_core.exe|1|
|opencv_test_imgproc.exe|1|
|opencv_test_photo.exe|1|
|opencv_haartraining.exe|1|
-[[3.0系のビルド>OpenCV3.0.0-betaのビルド]]より、極端にビルド時間が偏っているのが気になる。
*CUDAのアーキテクチャを指定した場合 [#s7865aaf]
-[[だんでらいおん先生 (@dandelion1124)>http://twitter.com/dandelion1124]]から「CUDAのアーキテクチャを指定する」とマシになるというありがたいお言葉を頂いた¬e{very-useful-information-from-master-dandelion1124:[[dandelionさんはTwitterを使っています: "@tomoaki_teshima CUDAのアーキテクチャを明示的に指定すると多少マシになるかもです. http://t.co/g2DyVaF8Uk">https://twitter.com/dandelion1124/status/535018864375898112]], 2014-11-19投稿, 2014-11-19閲覧};ので、実験してみた。
**CUDAのアーキテクチャって何? [#c03bbddb]
-[[参考URL>http://answers.opencv.org/question/5090/why-opencv-building-is-so-slow-with-cuda/]]¬e{why-opencv-building-is-so-slow-with-cuda:[[Why OpenCV building is so slow with CUDA? - OpenCV Q&A Forum>http://answers.opencv.org/question/5090/why-opencv-building-is-so-slow-with-cuda/]], 2012-12-12投稿, 2012-12-12回答, 2012-12-14更新, 2014-11-20閲覧};にも書いてあるが、
--CUDAのコードは、GPUのアーキテクチャにより、同じコードを何度もコンパイルする必要がある
--CUDAのコードを実行するGPUのアーキテクチャを単一に指定すれば、複数アーキテクチャ分ビルドする必要がなくなる
--そのために必要な手続きは cmake 内にて以下の変更をする
---CUDA_ARCH_PTX の欄が 3.0 なのを空欄に変更する
---CUDA_ARCH_BIN の欄に 1.1 1.2 1.3 2.0 2.1(2.0) 3.0 3.5 と複数の数値が書かれているのを、必要なアーキテクチャの数字だけ残す
--なお、GPUのアーキテクチャについては、[[nVidiaのサイト>https://developer.nvidia.com/cuda-gpus]]¬e{cuda-gpus-nvidia-official:[[CUDA GPUs>https://developer.nvidia.com/cuda-gpus]], 2014-11-20閲覧};にて、自分のGPUの型番を調べれば良い。
--例えば、私のマシンは、GeForce GT 650M が載っている。
--それを[[nVidiaのサイト>https://developer.nvidia.com/cuda-gpus]]¬e{cuda-gpus-nvidia-official};で参照すると、3.0と書いてあるので、 CUDA_ARCH_BIN の欄に 3.0 と書けば良いことになる。
#ref(GT_650M_30.png)
-参考URL
--[[Why OpenCV building is so slow with CUDA? - OpenCV Q&A Forum>http://answers.opencv.org/question/5090/why-opencv-building-is-so-slow-with-cuda/]]¬e{why-opencv-building-is-so-slow-with-cuda};
--[[CUDA GPUs>https://developer.nvidia.com/cuda-gpus]]¬e{cuda-gpus-nvidia-official};
--[[dandelionさんはTwitterを使っています: "@tomoaki_teshima CUDAのアーキテクチャを明示的に指定すると多少マシになるかもです. http://t.co/g2DyVaF8Uk">https://twitter.com/dandelion1124/status/535018864375898112]]¬e{very-useful-information-from-master-dandelion1124};
*ビルド前準備(アーキテクチャ指定時) [#e6e440ad]
-gitのclone、switchまでは同じ
-CMakeを起動し、configureした後、図の黒枠の中の用に、CUDA_ARCH_BINを 3.0 に、CUDA_ARCH_PTX を空欄にする。
#ref(cmake_2_4_10_1_architecture_specific.png)
-もう1度configureボタンを押し、Generate でソリューションファイルを作成する
*ソースコードのビルド(アーキテクチャ指定時) [#u664dba4]
-以降は同様に、バッチビルドを行う。
-Debug/ReleaseのALL_BUILD で、なんと、1時間21分でビルドが終了した!実にビルド時間が4時間以上短縮され、1/4程度で済むようになった!
-なんと、1時間21分でビルドが終了した!実にビルド時間が4時間以上短縮されました!大事なことなので2回言いました!
-[[twitterで2時間半でビルドできたと発言>https://twitter.com/tomoaki_teshima/status/535226349833949184]]しましたが、1時間21分でビルドが終了しました!大事なことなので3回言いました!
*OppenCVビルド時のコンフィグなど [#mf694a74]
**cvconfig.h (アーキテクチャ指定時の差分のみ) [#jbc97669]
-CUDA_ARCH_BINとCUDA_ARCH_FEATURESの文字列が変わっているのが見える
#geshi(diff){{
/* Compile for 'real' NVIDIA GPU architectures */
-#define CUDA_ARCH_BIN " 11 12 13 20 21 30 35"
+#define CUDA_ARCH_BIN " 30"
/* Create PTX or BIN for 1.0 compute capability */
/* #undef CUDA_ARCH_BIN_OR_PTX_10 */
/* NVIDIA GPU features are used */
-#define CUDA_ARCH_FEATURES " 11 12 13 20 20 30 35 30"
+#define CUDA_ARCH_FEATURES " 30"
/* Compile for 'virtual' NVIDIA PTX architectures */
-#define CUDA_ARCH_PTX " 30"
+#define CUDA_ARCH_PTX ""
}}
-なお、この文字列定数は modules/dynamicuda/include/opencv2/dynamicuda/dynamicuda.hpp に渡される.
#geshi(c++,number,start=466){{
fromStr(CUDA_ARCH_BIN, bin);
fromStr(CUDA_ARCH_PTX, ptx);
fromStr(CUDA_ARCH_FEATURES, features);
}}
-Dynamic Cuda じゃなくて、dynamicuda なのか。typoかと思った。
**version_string.inc (アーキテクチャ指定時の差分のみ) [#o95eed72]
-NVIDIA GPU arch と NVIDIA PTX archs が違っているのが見える。
#geshi(diff){{
Use CUBLAS: NO
- NVIDIA GPU arch: 11 12 13 20 21 30 35
- NVIDIA PTX archs: 30
+ NVIDIA GPU arch: 30
+ NVIDIA PTX archs:
Use fast math: NO
}}
-modules/gpu/opencv_gpu.vcxproj 内の AdditionalInputs 項目で指定されてるファイルが変更される
-感触的に、どんなnVidiaGPU上でも実行出来るようにprecompileするのが時間がかかるだけで、単一アーキテクチャに絞れば、確かにbuild時間が劇的に早くなるのが分かる。
**buildされたReleaseのdll一覧(アーキテクチャ指定時の差分のみ) [#fd476ada]
-ファイルサイズに違いのあったものだけ
2014/11/19 20:03 2,588,672 opencv_core2410.dll
2014/11/19 20:03 8,866,816 opencv_core2410.pdb
2014/11/19 20:39 65,228,800 opencv_gpu2410.dll
2014/11/19 20:39 56,912,896 opencv_gpu2410.pdb
2014/11/19 21:08 748,032 opencv_nonfree2410.dll
2014/11/19 21:08 5,925,888 opencv_nonfree2410.pdb
2014/11/19 21:10 720,896 opencv_superres2410.dll
2014/11/19 21:10 6,474,752 opencv_superres2410.pdb
**buildに要した時間Top10 [#s2aeef0b]
-dllのファイルサイズでも現れているように、gpuモジュールのbuild時間が劇的に短くなっている。
-oclモジュールも短くなっている割に、サイズが全く同じなのが非常に謎
-しかもファイルサイズは全く同じなのに、バイナリレベルでは中身が違う。ファイルサイズが一緒なのはマジで謎。
-superresモジュールもbuild時間が10分→2分と短くなっているのが分かる
|dllの名前|所要時間|
|opencv_gpu2410.dll|29|
|opencv_ocl2410.dll|28|
|opencv_imgproc2410.dll|5|
|opencv_superres2410.dll|2|
|opencv_contrib2410.dll|2|
|opencv_video2410.dll|1|
|opencv_nonfree2410.dll|1|
|opencv_stitching2410.dll|1|
|opencv_features2d2410.dll|1|
|opencv_core2410.dll|0|
-[[3.0系のビルド>OpenCV3.0.0-betaのビルド]]では、満遍なくビルド時間が2.4.10.1より掛かるのだが、恐らくそれはoclMatがデフォルトで使われるようになっているから、どのモジュールでもGPU関連のビルドが実行されるから、だと推測される。
-参考資料:[[【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat>http://www.slideshare.net/YasuhiroYoshimura/gpgpu2opencvopencloclmat]]¬e{gpgpu-dandelion1124-20131130:[[【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat>http://www.slideshare.net/YasuhiroYoshimura/gpgpu2opencvopencloclmat]], 2013-11-30発表, 2014-11-20閲覧};
-参考資料:[[【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう>http://www.slideshare.net/YasuhiroYoshimura/gpgpu-dandelion1124-201301130]]¬e{gpgpu-dandelion1124-20130601:[[【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう>http://www.slideshare.net/YasuhiroYoshimura/gpgpu-dandelion1124-201301130]], 2013-06-01発表, 2014-11-20閲覧};
-OpenCVの%%錬成%%ビルドに要する時間が短くなった反面、このOpenCVで作られたプログラムは、古いGPUでは動かなかったり、動いたとしてもパフォーマンスが出ない可能性がある。と思う。(未検証)
*謝辞 [#bb0e01d7]
-[[@dandelion1124先生>http://twitter.com/dandelion1124]]に感謝。
*関連ページ [#jc09146e]
-[[OpenCV3.0.0-betaのビルド]]
-[[OpenCV3.0.0-alphaのビルド]]
-[[OpenCV2.4.10のビルド]]
-[[OpenCV2.4.9のビルド]]
-[[OpenCV2.4.8のビルド]]
-[[OpenCV2.1と2.2に見るビルド方法の違い]]
-[[:OpenCV 2.4]]
-[[:OpenCV]]