”
Vitis_Accel_Examples を Ultra96V2 のプラットフォームでやってみる1(array_partition)”の続き。
前回は、Vitis_Accel_Examples の hello_world 以外のサンプルを Ultra96V2 のプラットフォームでやってみようということで、ccp_kernels/array_patition を Ultra96V2 のVitis アクセラレーション・プラットフォームでやってみた。今回は、array_partition をVivado や Vivado HLS のプロジェクトを見ながら詳しく見ていこう。
array_partition には、アクセラレーション・カーネルが 2 つ存在する matmul.cpp と matmul_partition.cpp だ。

matmul.cpp と matmul_partition.cpp の記述を比べてみると、 matmul_partition.cpp に array_partition の指示子が追加され、そして、ラベルの名前だけが異なることが分かる。
matmul_partition.cpp の方が pipeline 指示子の指定を実行できるように、配列をバラバラにしてデータのポート数を稼いでいることが分かる。つまりチューニングの度合いが違うのだ。

ここで、Vivado プロジェクトを見てみよう。

ブロックデザインを見ると、matmul と matmul_partition が IP として挿入されている。

Address Editor 画面を示す。

次に Vivado HLS プロジェクトを見ていこう。当然ながら、matmul と matmul_partition の 2 つのプロジェクトがある。
matmul プロジェクトを示す。

matmul_partition プロジェクトを示す。

matmul プロジェクトの C コードの合成結果を示す。

Latency は 28.45 us かかっている。原因は、nopart1_nopart2 Loop で Initiation Interval の achieved が 8 だったからだ、target は 1 になっている。
matmul_partition プロジェクトの C コードの合成結果を示す。

こちらの Latency は 10.52 us となっている。matmul に比べて約 2.7 倍速くなっている。
リソース使用量はBRAM は matmul の 7 個から 3 個に減っている。FF と LUT は増えている。
前回の結果を見てみよう。
| matmul: | 927760 | ( ns )
| matmul: partition | 134180 |
これだと性能差は 6.91 倍になっている。Vivado HLS の結果と違うのはなぜだろうか?
- 2019年11月25日 05:05 |
- Vitis
-
| トラックバック:0
-
| コメント:0