FC2カウンター FPGAの部屋 2013年09月24日
FC2ブログ

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

FPGAの部屋

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

ソフトウエアのプロファイリング1(mmap(), munmap() の時間計測)

ZedBoard Linux上でカメラの画像を処理する7(ラプラシアンフィルタ5)”でラプラシアン・フィルタは完成したが、ソフトウェアの動作時間は139秒だった。何処に時間がかかっているかをプロファイリングしようと思う。使用するのは、gettimeofday() だ。”システムプログラム(第4週)”を参考にプログラムしていく。

laplacian_filter.c の最初と最後に、gettimeofday()を入れて、プログラム動作時間を計測すると同時に、mmap() で領域を確保するための時間を計測する。

laplacian_filter.c の最初と最後の部分を下に示す。最初の部分。


gettimeofday(&start_time, NULL); // プログラム起動時の時刻を記録


最後の部分。


gettimeofday(&end_time, NULL);
printf("mmap() time = %d usec\n", temp2.tv_usec - temp1.tv_usec);
printf("total time = %d sec\n", end_time.tv_sec - start_time.tv_sec);
return(0);
}


次に、mmap() の時間計測部分を下に示す。


if (x==1 && y==1 && j==-1 && i==-1)
gettimeofday(&temp1, NULL);

r_pixel = setup_io((off_t)r_addr_page, &r_buf);

if (x==1 && y==1 && j==-1 && i==-1)
gettimeofday(&temp2, NULL);


これで、ラプラシアン・フィルタのプログラムを走らせたところ、下のような結果が得られた。

mmap() time = 18 usec
total time = 139 sec


mmap() time は 18usec、total time は 139sec かかっている。

ラプラシアン・フィルタは800x600 画面の縦横それぞれ-2個少ない数の演算を行っているが、それごとに9回分、カメラ画像を取得するために mmap() を行っている。更に、フレーム・バッファにWriteするために 800x600 回分、mmap() を実行している。下に mmap() を実行した回数の式を示す。
798*598*9 + 800*600 = 4774836(回)
これに、18usec を掛けると、mmap() の実行時間が計算できる。それは、85,947,048usec となり、86秒ほど実行時間がかかっていることになる。

もっと、gettimeofday() で実行時間を計測したかったが、ラプラシアン・フィルタのソフトウェアを実行するとカーネルパニックになってしまうので、とりあえずはこのへんで止めざる負えない。
  1. 2013年09月24日 03:39 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0