”
今まで作ってきた層のテンプレートをMNIST のCNN に適用する1(C コードの合成1)”の続き。
前回は、MNISTのCNNを以前実装したときに比べて性能は84 倍になったが、リソース使用量がPYNQボードのZynq のPL 容量をオーバーしてしまった。今回は、PYNQボードのZynq に入るようにパラメータを設定しC コードの合成を行う。
その際に使用するのが、”
全結合層のテンプレートの変更”で全結合層のテンプレートに追加した OUTPUT_PIPELINE_II だ。この値を変更することにより、リソース使用量を変更することができる。
というのも、BRAM_18K を使用しているのは全部、全結合層の第1層目だからだ。Analysis 画面を見てみよう。

左上の Module Hierarchy の affine_layer1 を見ると、434 ですべてのBRAM_18K を使っているのが分かる。
affine_layer1 の現在の OUTPUT_PIPELINE_II の値は、affine_layer_template_1 の Loop4 のInitiation Interval の archived を見れば分かる。

Loop4 のInitiation Interval の archived の値は 2 だった。現在のPIPELINE指示子のLoop4 の II は 2 ということになる。
さて、affine_layer1 の現在の OUTPUT_PIPELINE_II の値を 4 に設定してみよう。

これで、C コードの合成を行った。結果を示す。


Latency は min が 59656 クロック、max が 61096 クロックになった。
BRAM_18K は 103 % でまだオーバーしている。
affine_layer_template_1 の Loop4 のInitiation Interval の archived は 4 だった。設定通りだ。


次に、、affine_layer1 の現在の OUTPUT_PIPELINE_II の値を 8 に設定してみよう。

これで、C コードの合成を行った。結果を示す。


Latency の min は 116680 クロックで、 max は 118120 クロックだった。
BRAM_18K は 146 個、 52 % となった。これならばPYNQボードのZynq に入りそうだ。
この場合の”
「ゼロから作るDeep Learning」の畳み込みニューラルネットワークのハードウェア化6(再度Vivado HLS )”との性能向上を計算してみよう。
”
「ゼロから作るDeep Learning」の畳み込みニューラルネットワークのハードウェア化6(再度Vivado HLS )”の場合は、Latency の max が 2475569 なので、2475569 / 118120 ≒ 21 倍に性能が向上した。
- 2018年05月20日 08:12 |
- DNN
-
| トラックバック:0
-
| コメント:0