FC2カウンター FPGAの部屋 Vivado HLS で実装した畳み込みニューラルネットワークの指示子による性能差

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

FPGAの部屋

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

Vivado HLS で実装した畳み込みニューラルネットワークの指示子による性能差

Vivado HLS で実装した白線追従用の畳み込みニューラルネットワークで指示子を入れていないときと入れたときの性能差を比べてみよう。

Vivado HLS で実装した白線追従用の畳み込みニューラルネットワークで指示子を入れていないときの実装は、”白線追従走行用畳み込みニューラルネットワークの製作19(Cコードの合成、IP化)”で、指示子を入れたときの実装は”白線追従走行用畳み込みニューラルネットワークのチューニング”だ。

指示子を入れていない、”白線追従走行用畳み込みニューラルネットワークの製作19(Cコードの合成、IP化)”のLatency は187374 クロックだった。
wlt_cnn_88_170830.png

指示子を入れたときの実装の”白線追従走行用畳み込みニューラルネットワークのチューニング”では、26924 クロックだった。
wlt_cnn_130_170905.png

性能差は、187374 / 26924 ≒ 6.96 倍だった。

次に、Loop ごとの使用クロックを見てみよう。
指示子を入れていない、”白線追従走行用畳み込みニューラルネットワークの製作19(Cコードの合成、IP化)”のLoop ごとの使用クロックを示す。指示子を入れていないので、各Loop の使用クロックがそのまま表示されている。CONVとaf1_dot1 のループ数が多いのが分かる。
wlt_cnn_133_170905.png

指示子を入れたときの実装の”白線追従走行用畳み込みニューラルネットワークのチューニング”では、各ループがPIPELINE指示子によって、展開されてまとめられているのが分かる。使用クロック数も少なくなっている。
wlt_cnn_131_170905.png

最後にリソース使用量を見ていこう。
指示子を入れていない、”白線追従走行用畳み込みニューラルネットワークの製作19(Cコードの合成、IP化)”のリソース使用量を示す。
BRAM_18K は 13 個、DSP48E が 9 個、FF は716 個、LUT は 1476 個使用している。
wlt_cnn_134_170905.png

指示子を入れたときの実装の”白線追従走行用畳み込みニューラルネットワークのチューニング”のリソース使用量を示す。
BRAM_18K は 4 個、DSP48E が 27 個、FF は9909 個、LUT は 15033 個使用している。
wlt_cnn_132_170905.png

指示子を入れていない実装に対して、指示子を入れた実装は、BRAM_18K が約 0.31 倍、DSP48E が 3 倍、FF が約 13.8 倍、LUT が約 21.0 倍、LUT が約 10.2 倍になった。
BRAM_18K 以外は、指示子を入れていない実装のほうが指示子を入れた実装よりもリソース使用量が少なかった。

と言う訳で、性能とリソース使用量はトレードオフの関係にあるということができると思う。白線追従の用途では、指示子を入れない実装の処理速度で十分だ。
  1. 2017年09月05日 05:09 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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