OpenCVをOpenMPモードでコンパイルした

Visual C++ 2008 ExpressでOpenMPを見て、さっそくOpenCVをOpenMPモードでコンパイルしてみた。
手順は*1

1. VC++ 2008 ExpressとWindows SDK for Windows Server 2008をインストール

Microsoft Visual Studio Express

Download: Windows SDK for Windows Server 2008 and .NET Framework version 3.5 - Microsoft Download Center - Download Details

VC++ 2008の設定で、SDKのディレクトリを参照するように設定。

2. VC++ 2008 ExpressでOpenCVのプロジェクトを開くと形式が違うと怒られるので変換

もう2005で開かない予定なのでやってしまう。

3. たしかあったはずのOpenMPモードがなぜか消えているのでReleseモードにOpenMPの設定を行う
  1. リンクにvcomp.libを追加
  2. コマンドラインに/openmpを追加

(/Qopenmpはインテルコンパイラ向けオプション)

4. omp.hをインクルードしている箇所を修正

僻地のプログラマkmt-t - わりとどうでもいい日記 1.0より、

#ifdef _DEBUG
    #undef _DEBUG
    #include <omp.h>
    #define _DEBUG
#else
    #include <omp.h>
#endif

としておく。

5. コンパイル

afxres.hが無いといわれたので、afxres.hとwinres.hをSDKのサンプルディレクトリからOpenCVのディレクトリにコピった。

6. 試す

haartrainingを実行した。
OpenMPモードでないときは、C2D環境で最高でも50%までしかCPU使用率が上がらなかったが、80%以上を使用するようになった。
また、Process Explorerでスレッド数を確認すると、『2』になっていた。(OpenMPモードでないときは1だった)

*1:もともと2005でコンパイル環境は作っていた