#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のアーキテクチャを指定する」とマシになるというありがたいお言葉を頂いた&note{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/]]&note{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]]&note{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]]&note{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/]]&note{why-opencv-building-is-so-slow-with-cuda};
--[[CUDA GPUs>https://developer.nvidia.com/cuda-gpus]]&note{cuda-gpus-nvidia-official};
--[[dandelionさんはTwitterを使っています: "@tomoaki_teshima CUDAのアーキテクチャを明示的に指定すると多少マシになるかもです. http://t.co/g2DyVaF8Uk">https://twitter.com/dandelion1124/status/535018864375898112]]&note{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]]&note{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]]&note{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]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS