C++による2値化処理の実装手法ごとの速度比較を行うベンチマークプロジェクトです。 OpenCV標準実装と、自作実装(分岐あり/分岐なし/LUT/SIMD + OpenMP)を比較します。
画像の2値化処理は単純に見えますが、 実装方法によって 実行時間に大きな差 が生じます。
本プロジェクトでは以下の実装を比較します
- 分岐あり(三項演算子)
- 分岐なし実装
- LUT (ルックアップテーブル)
- SIMD + OpenMP (自作)
- OpenCV (cv::threshold)
AVX2有効環境での実測結果を通して、 CPU最適化がどこまで効くのかを検証します。
- CPU: Intel Core Ultra 7 265KF
- OS: Windows 11
- Compiler: MSVC 19.50
- Build: Release
- SIMD: AVX2
- Parallel: OpenMP
git clone https://github.com/microsoft/vcpkg.git C:/tools/vcpkg
cd C:/tools/vcpkg
bootstrap-vcpkg.bat※ C:/tools/vcpkg は例です。 別の場所に置く場合は後述のCMAKE_TOOLCHAIN_FILEを変更してください。
git clone https://github.com/shimon0724/2BinProcessSpeedComp.git
cd 2BinProcessSpeedCompVisual Studioを使う場合はリポジトリのルートフォルダを開き、画面上部の構成選択から
- vcpkg-x64-release
を選択してビルドを開始してください。
- 初回ビルド時にvcpkgが自動でOpenCVをインストールします。
- .slnまたは.slnxファイルは作成されません(CMakeプロジェクトの正常な挙動です)
cmake -S . -B out/build/vcpkg-x64-release -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=C:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows
cmake --build out/build/vcpkg-x64-releaseout/build/vcpkg-x64-release/2BinProcessSpeedComp/2BinProcessSpeedComp.exe- OpenCVのバイナリはGitHubには含まれません
- 依存ライブラリはvcpkgにより自動取得されます
- out/ディレクトリは.gitignoreされています
CMAKE_TOOLCHAIN_FILEのパスを自分のvcpkgの場所に合わせて修正してください。
CMAKE_TOOLCHAIN_FILE not found