FC2カウンター FPGAの部屋 OpenMPでのラプラシアンフィルタの実行速度

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

OpenMPでのラプラシアンフィルタの実行速度

今まで、NEON命令を使ってラプラシアンフィルタの実行速度を測ってきたが、今回はOpenMPを使って、高速化してみよう。
OpenMPとは複数のプロセッサを使ったマルチスレッディングを行うための API だそうだ。

参考にしたWebサイトは”OpenMP”と”gccのOpenMP実現について”だ。

まずは、”gccのOpenMP実現について”のhello.c をコンパイルして実行してみた。
ちなみに、”#incluce”だけではコンパイル・エラーだったので、”#incluede ”に変更した。

後は、同様に、gcc -fopenmp hello.c でコンパイルして、./a.out で実行した。
OpenMP_1_150716.png

Zynq は、Dual Core のCortex-A9 使用していて、2つのプロセッサなので、2プロセッサ使えるようだ。

次に laplacian_filter.c の 最初の for 文の前に”OpenMP”を参考にして、
#ifdef _OPENMP
#pragma omp parallel for
#endif

を入れてみた。
OpenMP_2_150716.png

gcc-4.8 で下のコマンドでコンパイルを行った。
gcc -fopenmp laplacian_filter.c -o laplacian_filter1_mp
コンパイルが正常に終了した。./laplacian_filter1_mp で動作させた。
OpenMP_3_150716.png

ラプラシアンフィルタ処理結果がおかしい。
OpenMP_7_150716.jpg

ラプラシアンフィルタのみの処理時間は、変動が大きいので、5回の平均を取った。その結果は、約 262 ms だった。
通常のlaplacian_filter1 のラプラシアンフィルタのみの処理時間は、425 ms なので、425 ms / 262 ms ≒ 1.62 倍速くなっているが、結果がおかしいのではしょうがない。

次に、laplacian_filter.c の次の for 文の前に
#ifdef _OPENMP
#pragma omp parallel for
#endif

を入れてみた。
OpenMP_4_150716.png

これで同様に、gcc -fopenmp laplacian_filter.c -o laplacian_filter1_mp
コンパイルが正常に終了した。./laplacian_filter1_mp で動作させた。
OpenMP_5_150716.png

今度は、ラプラシアンフィルタのみの処理時間は、約 243 ms だった。これも通常のラプラシアンフィルタのみの処理時間と比べてみよう。 425 ms / 243 ms ≒ 1.75 倍速かった。

今回のラプラシアンフィルタの処理画像は、最初に...... が入っているのが、バグのようだ。
OpenMP_8_150716.jpg

ちなみに、./laplacian_filter1 実行結果、つまり通常にコンパイルしたラプラシアンフィルタの処理画像を示す。
OpenMP_9_150716.jpg
  1. 2015年07月16日 05:28 |
  2. Zynq
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/3200-eef45995
この記事にトラックバックする(FC2ブログユーザー)