PPL
Microsoft PPL(Parallel Patterns Library)で簡単にプログラムを並列化&高速化できます。KinectFusionのサンプルコードを見ていて、気づきました。
使用するには、ppl.hをインクルードします。Visual Studio 2010以降から、標準搭載されているようです。
#include <ppl.h>
使用例
たとえば、画像や点群を扱うときの2重ループ(for文)では、普段なら、
for(int y = 0; y < image.rows; y++)
{
for(int x = 0; x < image.cols; x++)
{
//処理
}
}
と、こう書くところを、最初の1行を変えて、最後に**);**を付け加えるだけで、
Concurrency::parallel_for(0, image.rows, [&](int y)
{
for (int x = 0; x < image.cols; x++)
{
//処理
}
});
並列処理が実現できてしまいます。
処理時間の計測
やってみて、うまく計算できてたら、処理時間を比較してみましょう!
OpenCVには処理時間を測るための、TickMeterクラスがあります。
using namespace cv;
TickMeter tm;
tm.start();
//この間に記述されたプログラムの処理時間を測る
tm.stop();
//秒で表示
cout << "Time = " << tm.getTimeSec() << " sec." << endl;
//ミリ秒で表示
cout << "Time = " << tm.getTimeMilli() << " ms." << endl;
まとめ
画素値アクセスや3D点群処理は、forループだけで結構時間かかるので、助かる。か・も・し・れ・な・い
実は、2重ループくらいじゃ処理速度はあんまり変わらない。笑
*Common Language RunTime Support (/clr)でビルドするとエラーが出るので、No Common Language RunTime Supportに変更してください。