FC2カウンター FPGAの部屋 SqueezeNet for MNIST のVivado HLS での試行2
FC2ブログ

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

FPGAの部屋

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

SqueezeNet for MNIST のVivado HLS での試行2

SqueezeNet for MNIST のVivado HLS での試行1”の続き。

SqueezeNet for MNIST 3(層の統計情報とC ヘッダ・ファイルへの出力)”で層の統計情報と重みやバイアスの C ヘッダ・ファイルを出力したので、それらを使用して、SqueezeNet for MNISTで、どのくらいのリソースが必要なのかを探ってみようということで、前回はソースコードを示した。今回はC コードの合成結果を示す。

さて、都合(reVISION-ZYBO-Z7-20 を動かす関係上)により、Vivado HLS 2017.4 で合成した時の結果を示す。
squeezenet_vhls_2_180906.png

Estimated は 11.46 ns で Target の 10.00 ns をオーバーしている。
Latency は 63527 クロックだった。
Instance は conv_layer1_U0 、 max_pooling_U0 、 relu_conv1_U0 のインスタンスがある。
リソース使用量は BRAM_18K が 3 個、DSP48E が 194 個、FF が 33233 個、LUT が 66650 個だった。
LUT が 125 % でオーバーしている。やはり、出力ストームの 96 チャネルを並列に計算しているので、リソースが足りない。

次に、Instance の conv_layer1_U0 をクリックして、畳み込み層の合成結果を見てみよう。
squeezenet_vhls_3_180906.png

Estimated は 11.46 ns で畳み込み層が全体の足を引っ張っていることがわかる。
ここでのLatency は 63527 クロックで、全体のレイテンシと同じだ。
BRAM_18K は 1 個、 DSP48E は 194 個、FF は 14752 個、 FF は 37433 個使用している。
FF は全体の 70 % を使用している。

次に conv_layer_template.h のリソース使用量を確認するために、Detail -> Instance の grp_conv_layer_template_fu_1426 をクリックした。
squeezenet_vhls_4_180906.png

Latency は 63526 クロックだった。
Detail -> Loop を見ると、Loop_y_Loop_pix_mat_nd の Initiation Interval の achieved が 81 クロックで Target の 1 から大きくかけ離れている。
やはり、96 Channel を一度に実装するのは無理があるようだ。
BRAM_18K は 1 個、 DSP48E は 194 個、FF は 14747 個、 FF は 36483 個使用している。

最初のレポートに戻って、max_pooling_U0 をクリックした。今度はマックス・プーリングを見ていこう。
squeezenet_vhls_8_180907.png

こちらのEstimated は 6.89 ns だった。これは要求を満たしている。
Latency は 16278 クロックだった。
リソース使用量は、BRAM_18K は 1 個、 DSP48E は 0 個、FF は 8986 個、 FF は 13993 個使用している。
マックス・プーリングも結構リソースを消費している。

max_pooling_template.h の状況を見るために grp_max_pooling_template_fu_2756 を見ていこう。
squeezenet_vhls_9_180907.png

Detail -> Loop を見ると、Loop1 の Initiation Interval の achieved が 48 クロックで、Loop2_Loop3 のそれが、96 クロックだった。Loop2_Loop3 は チャネルごとにシリアライズされている感じだ。

最後に、最初のレポートに戻って、relu_conv1_U0 をクリックして見てみよう。
squeezenet_vhls_10_180907.png

Estimated は 6.89 ns だった。
Latency は 16445 クロックで、マックス・プーリングよりも使用クロック数が少し多い。
リソース使用量は、BRAM_18K が 1 個、DSP48E が 0 個、FF が 8447 個、LUT が 10632 個使用してる。

relu_template.h のリソース使用量を確認するために、Detail -> Instance の grp_relu_template_fu_2756 をクリックした。
squeezenet_vhls_11_180907.png

Detail -> Loop を見ると、Loop1 の Initiation Interval の achieved が 48 クロックで、Loop2_Loop3 のそれが、97 クロックだった。こちらの Loop2_Loop3 もチャネルごとにシリアライズされている感じだ。

C コードの合成結果からは、SqueezeNet for MNIST の 96 チャネル並列演算でZYBO Z7-20 では使い物にならないことが分かった。リソース使用量が大きすぎる。
だが、テンプレートを使用するとVivado HLS はリソース使用量の見積もりが甘くなることはすでに経験済みだ。よって、次回はExport RTL をやってみて、どのくらいの変化があるかを検証してみよう。
  1. 2018年09月07日 07:08 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/4288-99852d07
この記事にトラックバックする(FC2ブログユーザー)