FC2カウンター FPGAの部屋 SDx 2016.3 のプラグマによるハードウェアと性能の違い5

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

FPGAの部屋

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

SDx 2016.3 のプラグマによるハードウェアと性能の違い5

SDx 2016.3 のプラグマによるハードウェアと性能の違い4”の続き。

SDSoC 勉強会SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」の18ページの性能比較表で「プラグマ無し」と「SEQUENTIAL」のハードウェア実行時間がばらつくのは、メモリ領域を malloc() で取っているからではないか?という指摘を頂いた。malloc() でとるとページ(4kバイト)ごとに不連続なメモリを使用している可能性がある。ページごとに、スワップアウトしているかどうか?を確かめてスワップアウトされていたらスワップインする必要がある。つまり、ページごとに余計な処理をする必要がある。それで、遅くもなっているし、時間の変動も起こるのではないか?という指摘だった。
それならば、sds_alloc() でCMA 領域に連続メモリ領域を確保すれば大丈夫なはずだ。なお、ソフトウェアはMMU を通っているので、MMUで論理アドレスー物理アドレス変換が自動的に行われるので、CPUから論理アドレスに書けばページが違っていても問題ない。(論点が微妙に違うのはご容赦ください)

さて、前回のSDSoC の lap_filter2 プロジェクトは memcpy() を使った実装を上書きしてしまったので、新たに lap_filter1 プロジェクトを作成した。
SDx_2016_3_2_1_170130.png

今回は、最初から hw_rd_bmp と hw_lapd にメモリ領域を確保する際に、sds_alloc() を使用した。
SDx_2016_3_2_2_170130.png

これで、プラグマ無しにしてRelesase でビルドを行った。
SDx_2016_3_2_3_170130.png

MicroSD カードに sd_card フォルダの内容を書いて、ZYBO の電源ONした。
Linux が立ち上がった。cd /mnt し、 ./lap_filter1.elf を起動した。結果を示す。
SDx_2016_3_2_4_170130.png

ソフトウェア実行時間がたま~にばらつくときがあるのだが、ハードウェア実行時間は安定した。やはり、malloc() で取るとハードウェア実行時間は安定しないようだ。
明らかにソフトウェア実行時間がおかしい値を除いたハードウェア実行時間の5回の平均は、1047 us だった。明らかにおかしい値を除いたソフトウェア実行時間の5回の平均は、854 us だった。

次に、

#pragma SDS data access_pattern(cam_fb:SEQUENTIAL, lap_fb:SEQUENTIAL)

プラグマを使用した場合について、やってみよう。今回もハードウェアに関するメモリ領域は引き続き、sds_alloc() を使用している。
SDx_2016_3_2_5_170130.png

Relesase でビルドを行った。
MicroSD カードに sd_card フォルダの内容を書いて、ZYBO の電源ONした。
Linux が立ち上がった。cd /mnt し、 ./lap_filter1.elf を起動した。結果を示す。
SDx_2016_3_2_6_170130.png

こちらも、ソフトウェア実行時間がたま~にばらつくときがあるのだが、ハードウェア実行時間は安定した。やはり、malloc() で取るとハードウェア実行時間は安定しないようだ。
明らかにソフトウェア実行時間がおかしい値を除いたハードウェア実行時間の5回の平均は、969 us だった。プラグマ無しよりもこちらのほうがハードウェア実行時間が短い。明らかにおかしい値を除いたソフトウェア実行時間の5回の平均は、843 us だった。

ソフトウェアのメモリ領域の確保も sds_alloc() にしてみよう。これでどうなるだろうか?
SDx_2016_3_2_7_170130.png

Relesase でビルドを行った。
MicroSD カードに sd_card フォルダの内容を書いて、ZYBO の電源ONした。
Linux が立ち上がった。cd /mnt し、 ./lap_filter1.elf を起動した。結果を示す。
SDx_2016_3_2_8_170130.png

ソフトウェア実行時間もばらつく頻度が多くなった気がする。ハードウェア実行時間もたまにばらついている。

プラグマ無しで、ソフトウェアのメモリ領域の確保も sds_alloc() にしてみた。
SDx_2016_3_2_9_170130.png

Relesase でビルドを行った。
MicroSD カードに sd_card フォルダの内容を書いて、ZYBO の電源ONした。
Linux が立ち上がった。cd /mnt し、 ./lap_filter1.elf を起動した。結果を示す。
SDx_2016_3_2_10_170130.png

やはり、ソフトウェア実行時間もばらつく頻度が多くなった気がする。
  1. 2017年01月31日 05:00 |
  2. SDSoC
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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