2011年2月26日土曜日

OpenCV:CUDA, TBB付きのインストール

OpenCVを使っていてかなり計算時間がかかる(RandomTreeを使っています)処理をやっていました。あまりにも時間がかかるので、CUDATBBがOpenCV2.2では使えることを思い出し、インストールしてみました。そのメモです。結局RandomTreeの処理自体がCUDAで実装し直されているわけではなかったようで高速化はしませんでしたが(^^;

CUDAやTBBが利用出来るバイナリは提供されていませんので、ソースをダウンロードしてmake/buildする必要があります。ここ

■安定版をインストール(ソースから)

を参考にインストールしていきます。インストールするのはWindows版の

CUDAここの下の方にある表の中のCUDA Toolkitの32bitとか自分の環境に合わせて)
NPP(Nvidia Performance Primitives)(ここの下の方にある表の中のNVIDIA Performance Primitives (NPP) libraryの32bitとか自分の環境に合わせて)
TBB(Intel Threading Building Block)(ここの一番新しいやつ、一番上ですね)
OpenCV2.2 (ここのzipファイル)

です。

ダウンロードが終わったらCmakeを立ち上げます。GUIでいろいろな設定をします。まず今回はVisualStudio2005を利用するので、




のように設定します。こうするとコンパイラにVC++2005を採用してくれ、またOpenCVのVS2005用のsolutionを作ってくれるようです。

次に、


のような画面が現れるので”Where is the source code:” に OpenCV2.2を展開したディレクトリ を、 “Where to build the binaries:” に 好きなディレクトリ(僕は参考URLに従ってOpenCV2.2のディレクトリの下にbuildというディレクトリを作り、そこを指定しました。図は別なときにやった画面なのでディレクトリは違っています。) を選択します。

それからビルドオプションを選択します。

・WITH_TBBとWITH_CUDAにチェックを入れます。
・BUILD_DOXYGEN_DOCS のチェックを外します。こうしないとbuildするときに延々とhtmlファイルを作って終了しないバグがあるようです。このときのエラーもこれが原因だったのですね(^^;

それでConfigureボタンを押すと

NPPのinclude/librariesディレクトリが見つからない

などというディレクトリの設定エラーが出ます。

こんな感じです。


例えば上の例では TBB_INCLUDE_DIR-NOTFOUNDなどとなっていますのでTBBのincludeディレクトリを設定します。

NPPに関してはNPPをダウンロードしたzipファイルの中にあるSDKディレクトリ(npp_3.2.16_win_32.zipではSDKディレクトリが中にあるだけです)を適当なところに移して、そこをCUDA_NPP_LIBRARY_ROOT_DIRにセットしたらConfigure出来て、Generateも通りました(^^V

続いてOpenCVのbuildに移ります。buildディレクトリにVS2005用のソリューションファイル(.sln)が出来ていますので、これを立ち上げます。後はここに書いてあるようにALL_BUILDとINSTALLのdebugとreleaseプロジェクトをbuildします。そのときにTBBに関連して

critical_section.h(109) : error C3861: 'TryEnterCriticalSection': identifier not found

のようなエラーが出ますので、ここに書いてあるように

Project Property -> C/C++ -> Preprocesor -> Preprocesor definitions に
_WIN32_WINNT=0x0400

を付け加えます。

opencv_mlとopencv_objdetectの2つのプロジェクトでTBBを使っているようですので、これら2つのプロジェクトのプロパティの設定を行います。releaseとdebugの両方の設定が必要です。これでbuildすればめでたくOpenCV2.2のCUDA、TBB利用版が完成です(^^V buildには結構時間がかかりますので気長に待ちましょう。

0 件のコメント: