LoginSignup
7

More than 5 years have passed since last update.

PPLを使った簡単並列プログラミング(Visual Studio 2013, C++, OpenCV, 3D点群処理, Kinect)

Last updated at Posted at 2015-02-04

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に変更してください。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7