ロゴ メインコンテンツへ
RSSフィード
「ソフトウェア開発」に関連する記事一覧

OpenMP 内・外ループ並列化による処理速度計測実験

2011/10/30
(この記事の文字数: 919)
OpenMPでステレオブロックマッチングを並列化していたのですが、2次元の画像で並列化を考えると必ずどこかに次のようなループ構造ができます。

for(y=0;  y<ysize;  y++) //外側ループ
    for(x=0;  x<xsize;  x++) //内側ループ

内側ループを並列化すると外側ループよりも並列化のための準備処理が外側ループの回数分必要になってしまい、縦軸探索の範囲が広い場合には余計な処理時間がかなり増えてしまうような気がしますが、どのくらい処理時間が違ってくるのかよく知りませんでした。

ということで試しに、ステレオブロックマッチングの縦横探索範囲を内側ループを並列化した場合と外側ループを並列化した場合のそれぞれの速度を計測してみました。

OS: Windows 7 64bit
CPU: Core i7-930
memory: 6GB
実験に使用した画像解像度: 397x410
探索範囲: x方向40pixel, y方向40pixel (1画素辺りの探索ループ回数は1600回)

以下が計測結果です。単位はsec。試行回数は少なすぎますが挙動を知りたかっただけなので5回としました。

並列化なし
28.05
27.95
27.91
27.72
28.02
average: 27.93
 
内側ループの並列化
10.76
10.72
10.58
10.51
10.31
average: 10.576
 
外側ループの並列化
9.74
9.55
9.77
9.63
9.55
average: 9.648

内側ループ並列化+Qtのプログレスバー更新
11.06
10.83
10.92
10.95
11.0
average: 10.952

外側ループ並列化+Qtのプログレスバー更新
9.98
9.88
10.05
10.02
10.21
average: 10.028
 

実験結果からやはり内側よりも外側のループを並列化させた方が若干速くなるらしいということがわかりました。そんなに劇的な違いは見られなかったので、もしも、外側ループが極端に少ない場合などは内側ループを並列化しておいても問題はなさそうです。

それと、プログレスバーを使おうとするとやはり若干速度は遅くはなりますが、こちらもそんなに大きなロスはなさそうなので問題なく使えそうです。

  このエントリーをはてなブックマークに追加  

<<「ソフトウェア開発」の記事一覧に戻る

<<「ソフトウェア開発」の次の記事
「ソフトウェア開発」の前の記事 >>

コメント(0 件)



コンテンツロード: 0.0065 sec
Copyright(C)2006-2024 puarts All Rights Reserved