”
Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す10(streaming_lap_filter3 のプロファイル)”で、カーネル間のストリーミング接続は、カーネルを起動するレイテンシがかかっていることが分かった。ここでは、2 個のカーネルを連続して起動していた。それでは、カーネルが 1 個の時はどうなのだろうか? 同じ、ラプラシアン・フィルタの実装で確かめてみよう。もうすでに、Vitis のプロジェクトは作ってあって、ブログも書いてある。
”
Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン2”
”
Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン3”
”
Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン4”参照
”
Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン3”でプロファイル無しの状態での平均実行時間は、430 us だった。
”
Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン4”では、Appliction Timeline を表示したが、カーネルのプロパティは変更していなかったので、ソフトウェアだけのプロファイルを取っているようだった。この時の実行時間は 712 us だった。
今回は、カーネルのプロパティの Data Transfer を Counter + Trace に変更し、Stall Profiling にチェックを入れて、Appliction Timeline を表示してみよう。
Vitis 2019.2 の lap_filter_axis_dma プロジェクトを示す。

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

ビルドを行って終了した。成功だ。

Vivado のプロジェクトを見ると、”
Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す10(streaming_lap_filter3 のプロファイル)”と同様に System DPA が追加されている。

ビルドが成功したので、BOOT.BIN をUltra96-V2 のPetaLinux の /rum/media/mmcblk0p1 ディレクトリに転送した。つまり、MicroSD カードの第 1 パーティションに転送した。
/home/masaaki/Vitis_Work/2019.2/lap_filter_axis_dma/Hardware/sd_card に移動する。
scp BOOT.BIN 192.168.3.23:/run/media/mmcblk0p1Ultra96-V2 の PetaLinux をリブートして、Ultra96-V2 のPetaLinux で zocl ドライバをロードした。
insmod /lib/modules/4.19.0-xilinx-v2019.2/extra/zocl.koAssistant ウインドウの Hardware を右クリックして、右クリックメニューから Run -> Run Configurations... を選択する。
”
Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン4”ですでに設定は終了しているので、Run ボタンをクリックして、起動した。

実行時間は 917 us だった。

Assistant ウインドウの lap_filter_axis_dma_system -> lap_filter_axis_dma -> Hardware の下に、Debugger_lap_filter_axis_dma -> Run Summary(xclbin) をダブルクリックして Viits Analyzer を起動した。
Appliction Timeline をクリックして表示した。

clEnqueueTask からカーネルの lap_filter_axis_dma が起動するまでの時間を計測した。 636 us だった。長い。。。

clEnqueueTask から clFinish が終了するまでの時間は、1.830 ms だった。実行時間と合わない。

これは、時間計測に OpenCL の event.getProfilingInfo
() を使用しているからだろうか? ”Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す10(streaming_lap_filter3 のプロファイル)”では、gettimeofday() を使用している。以前測った時は、どちらでも値は変わらなかったのだが。。。
m_axi_gmem-DDR (inm|outm) などのトランザクションを拡大してみた。

更に拡大すると、AXIインターフェースのトランザクションが見える。

最後に Profile Summary を示す。




やはり、2 個のカーネルをカーネル間のストリーミング接続するよりも、ハードウェアで接続したほうが速い。
- 2020年02月14日 04:44 |
- Vitis
-
| トラックバック:0
-
| コメント:0