FC2カウンター FPGAの部屋 Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す10(streaming_lap_filter3 のプロファイル)
FC2ブログ

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

FPGAの部屋

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

Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す10(streaming_lap_filter3 のプロファイル)

Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す9(streaming_lap_filter3 プロジェクト2)”の続き。

前回は、カーネルのストリーミング接続の動作を実機で確かめたところ成功した。しかし、動作のレイテンシが遅かった。今回は、プロファイルを取得してみよう。なお、今回のプロファイルの設定は、Fixstars Tech Blog の”Zybo+VitisでSDSoC相当の高位合成やってみた”を参考にさせていただいている。

Assistant ウインドウで Streaming_lap_filter3_system -> streaming_lap_filter3 -> Hardware -> streaming_lap_filter3 の dma_read と krnl_lap_filter_dmaw のプロパティを変更する。
streaming_lap_filter_65_200212.png

dma_read を右クリックし、右クリックメニューから Settings... を選択する。
すると、Hardware Function Settings ダイアログが立ち上がる。そこで、、Data Transfer を Counter + Trace に変更し、Stall Profiling にチェックを入れた。
streaming_lap_filter_63_200212.png

同様に krnl_lap_filter_dmaw をを右クリックし、右クリックメニューから Settings... を選択する。
すると、Hardware Function Settings ダイアログが立ち上がる。そこで、、Data Transfer を Counter + Trace に変更し、Stall Profiling にチェックを入れた。
streaming_lap_filter_64_200212.png

これで、Hardware をビルドして、成功した。
streaming_lap_filter_66_200212.png

ビルドが成功したので、BOOT.BIN をUltra96-V2 のPetaLinux の /rum/media/mmcblk0p1 ディレクトリに転送した。つまり、MicroSD カードの第 1 パーティションに転送した。
/home/masaaki/Vitis_Work/2019.2/streaming_lap_filter3/Hardware/sd_card に移動する。
scp BOOT.BIN 192.168.3.23:/run/media/mmcblk0p1
streaming_lap_filter_69_200212.png

Ultra96-V2 のPetaLinux で zocl ドライバをロードした。
insmod /lib/modules/4.19.0-xilinx-v2019.2/extra/zocl.ko
streaming_lap_filter_67_200212.png

Assistant ウインドウの Hardware を右クリックして、右クリックメニューから Run -> Run Configurations... を選択する。
Debugger_streaming_lap_filter3 を作成した。
Enable profiling をクリックする。
Generate timeline trace report を Yes に変更する。
Collect Data Transfer Trace を Fine にする。
Collect Stall Trace を All にする。
Apply ボタンをクリックした。
Run ボタンをクリックして、動作させた。
streaming_lap_filter_68_200212.png

streaming_lap_filter_70_200212.png

動作させたところ、実行時間は 2.631 ms だった。
これは、”Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す9(streaming_lap_filter3 プロジェクト2)"での平均実行時間の 1.649 ms からすると、約 1 ms 程度、実行時間が長くなっている。プロファイルを取得するのに、それだけ余計な時間を取られるのだろう?
今回の実行時間を前回の平均実行時間にタイムスケールを合わせると、1.649 / 2.631 ≒ 0.627 倍すれば良いということになる。

Assistant ウインドウの streaming_lap_filter3_system -> streaming_lap_filter3 -> Hardware の下に、Debugger_streaming_lap_filter3 -> Run Summary(xclbin) をダブルクリックして、Vitis Analyzer を起動する。

Vitis Analyzer が立ち上がった。Application Timeline をクリックした。
streaming_lap_filter_71_200212.png

これを見ると、clCreateProgramBinary が長い。これは、ビットストリームをロードしている部分かな?
後ろの方にちょこっとデータ転送の部分が見えるので、拡大する。
streaming_lap_filter_72_200212.png

1 つ目の clEnqueueTask と 2 つ目の clEnqueueTask との間隔は、1.037 ms だった、これを 0.627 倍して補正すると 650 us となる。結構長い時間かかっている。よって、krnl_lap_filter_dmaw がすぐに起動されないので、dma_read の完了が伸びている。

更に拡大すると、dma_read や krnl_lap_filter_dmaw の AXI4 Master のトランザクションも見ることができる。これは、”Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す9(streaming_lap_filter3 プロジェクト2)"で見た ChipScope のAXI4 Master のトランザクション間隔とぴったり一致する。
streaming_lap_filter_73_200212.png

1 つ目の clEnqueueTask から 2 つ目の clFinish まで時間計測すると、2.602 ms となった。これは実行時間にほぼ等しい。
streaming_lap_filter_74_200212.png

1 つ目の clEnqueueTask から dma_read 起動までの時間は、406 us となった。これもプロファイル取得なしとすると、255 us となる。
streaming_lap_filter_75_200212.png

これだけ詳しくプロファイルを取得できるとなると、ハードウェアに追加されているはずだ。
Vivado のブロックデザインを見てみよう。
streaming_lap_filter_76_200212.png

System DPA というユニットが追加されている。
更に、dma_read と krnl_lap_filter_dmaw IP から出ている配線が追加されていた。

う〜ん。カーネルの起動が遅い気がする。もっと 2 つ目のカーネルを素早く起動できないものだろうか?
データ転送部分の占める割合が少ない気がする。

最後に Profile Summary を示す。
streaming_lap_filter_580_200213.png

streaming_lap_filter_581_200213.png

streaming_lap_filter_582_200213.png

streaming_lap_filter_583_200213.png
  1. 2020年02月13日 04:37 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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