Vitis™ アプリケーション アクセラレーション開発フロー チュートリアル

Vitis 入門チュートリアル

パート 5: 結果の表示とレポートの解析

ここまでで vector-add の例をビルドして実行したので、次はその結果と生成されたレポートを見てみます。この例は、3 つのビルド ターゲット (ソフトウェア エミュレーション、ハードウェア エミュレーション、およびハードウェア) すべてのビルドおよび実行サマリを生成するように設定されています。Vitis アナライザーの使用で説明されている方法で、Vitis アナライザーを使用して、これらのサマリ レポートをすべて表示および分析できます。

結果は、開いたサマリまたはレポートによって異なります。ハードウェアの実行は完全に正確です。ハードウェア エミュレーションはサイクル概算シミュレーションで、ソフトウェア エミュレーションは機能を考慮するためにのみ使用します。また、U200 カードと ZCU102 カードの特性は異なるため、これら 2 つのターゲット間の結果は異なります。解析する必要のあるプラットフォームおよびビルド ターゲットからの結果を確認します。

  • u200/sw_emu

  • u200/hw_emu

  • u200/hw

  • zcu102/sw_emu

  • zcu102/hw_emu

  • zcu102/hw

この演習では、u200/hw_emu ビルドおよび run を開いて、結果を確認します。

レポートおよびサマリの場所

アプリケーションを実行したディレクトリを見てみると、いくつかのファイルが生成されたことがわかります。

  • vadd.xo.compile_summary: コンパイルされたカーネルのサマリ レポート

  • vadd.xclbin.info: デバイス バイナリのテキスト形式のレポート

  • vadd.xclbin.link_summary: リンクされたデバイス バイナリのサマリ レポート

  • opencl_trace.csv: アプリケーション ランタイム中に発生するイベントのタイムライン

  • summary.csv: アプリケーション プロファイルのレポート

  • xrt.run_summary: アプリケーション ランタイムのイベントのサマリ レポート

重要: ZCU102 ハードウェアをターゲットにした場合、これらのファイルは SD カードに保存されるため、この演習を続行するにはワークステーションにコピーし直す必要があります。詳細は、エンベデッド プロセッサ プラットフォームでのエミュレーションの実行を参照してください。

これらのファイルおよびレポートの生成は、xrt.ini ファイルのランタイム オプションで制御されます。このチュートリアルには、既存の xrt.ini ファイルが含まれており、実行のタイムラインおよびプロファイル サマリ データ (次の内容を含む) を生成できるようになっています。

[Debug] opencl_trace=true

Vitis アナライザーで実行サマリを開く

次のコマンドを使用して、Vitis アナライザーでサマリを開きます。

vitis_analyzer ./vadd.xclbin.link_summary

Vitis アナライザーが開き、さまざまなレポートが読み込まれ、実行サマリが表示されます。Vitis アナライザーの左ペインを使用するか、サマリ レポートに表示されるリンクをクリックすると、さまざまなレポートを表示できます。

  • システム ダイアグラムを開きます。

    • システム ダイアグラムは、ザイリンクス デバイスの内容をグラフィカルに表示したものです。さまざまなハードウェア カーネルと、グローバル メモリ バンクなどのプラットフォーム リソースへの接続方法を示しています。

    • vadd ハードウェア アクセラレータの横に表示されるプロファイル情報を確認します。

    • 図の右上にある [Settings] アイコンをクリックし、[Show Interface Ports] チェック ボックスをオンにします。この図では、カーネル引数とカーネル ポートのマッピングが表示され、各ポートの帯域幅情報が示されています。

    • 図の下部にある 3 つのタブ ([Compute Units]、[Kernels]、[Memories]) をクリックして、それぞれに表示される情報を確認します。

  • システム ガイダンス レポートを開きます。

    • ガイダンス レポートは、アプリケーションで問題になりそうなものにフラグを付け、改善方法に関する実践的なフィードバックを提供します。

    • このシンプルな例は完全には最適化されていないので、ガイダンス レポートには警告がいくつか表示されます。これらの警告をそれぞれ調べて、最適化の可能性や設計のベスト プラクティスなどの詳細を確認してください。

    • カーネル ポートの幅について何がわかりますか。

link_summary には compile_summary も含まれます。Vitis アナライザーで compile_summary レポートのさまざまなエレメントを選択して、詳細を確認します。

Vitis アナライザーのメイン メニューから [File] → [Open Summary] をクリックして xrt.run_summary を開きます。

  • プロファイル サマリ レポートを開きます。

    • プロファイル サマリには、全体的なアプリケーション パフォーマンスに関する注釈付きの詳細が表示されます。アプリケーションの実行中に生成されたすべてのデータが複数のカテゴリに分類されます。

    • レポートの左側のペインを使用して、さまざまなカテゴリを確認し、プロファイル サマリにレポートされたすべてのメトリクスを確認します。

  • タイムライン トレースを開く

    • タイムライン トレースは、ホストとカーネルのイベント情報を収集し、共通のタイムラインに表示します。これは、システムの全体的な状態とパフォーマンスを視覚的に表示するのに役立ちます。このグラフィカル表示により、カーネル同期および並列実行の効率に関する問題を確認しやすくなります。

    • タイムライン トレースを拡大して右端までスクロールし、ホスト プログラムがバッファーを転送し、カーネルを実行するポイントを表示します。

    • さまざまなアクティビティ イベントの上にマウスを置くと、それぞれのイベントの詳細が表示されます。

    • タイムライン アクティビティを host.cpp ファイル内の API 呼び出しのシーケンスに関連付けることができますか。

img

Vitis アナライザーでさまざまなレポートの確認が完了したら、ツールを閉じます。

宿題

これで、Vitis フローの基本を学習しましたので、ご自身で試してみてください。まずは、ホスト プログラムを変更してみることをお勧めします。host.cpp ファイルを変更するだけなら、FPGA バイナリをビルドし直す必要はありません。これにより、ビルドと実行の反復が非常に迅速になります。

  • ホスト プログラムでは、ベクターのサイズは 4096 個のエレメントに (DATA_SIZE マクロを使用して) ハード コード化されます。

    • このサイズを大きくするとどうなりますか。

    • Vitis アナライザーにはどう表示されますか。

  • ホスト プログラムはアクセラレータを 1 回だけ呼び出します。

    • host.cpp のステップ 4 をループで囲んで、さらに何回か繰り返した場合はどうなりますか。

    • タイムライン トレースは今どのように見えていますか。

    • ホスト プログラムがアクセラレータを呼び出すたびに、異なるベクターをアクセラレータに送信するようにできますか。

まとめと次のステップ

これで、Vitis フロー 101 チュートリアルは終了です。コーディングの考慮事項やビルド、実行、レポートの表示方法など、Vitis プログラミングおよび実行モデルのすべての基本概念を理解できたはずです。

vector-add の例はシンプルですが、学ぶことが多いので、フローの重要な側面を深く掘り下げるのに非常に適したサンドボックスです。Get Moving with Alveo チュートリアルでは、同じ vector-add の例を活用し、一般的な最適化手法を説明することで、さらに手順をいくつか実行します。必ず確認してください。

Vitis チュートリアルのホーム ページに戻ります。


ライセンス規約

Apache ライセンス、バージョン 2.0 (以下「ライセンス」) に基づいてライセンス付与されています。本ライセンスに準拠しないと、このファイルを使用することはできません。ライセンスのコピーは、http://www.apache.org/licenses/LICENSE-2.0 から入手できます。

適切な法律で要求されるか、書面で同意された場合を除き、本ライセンスに基づいて配布されるソフトウェアは、明示的または黙示的を問わず、いかなる種類の保証または条件もなく、「現状のまま」配布されます。ライセンスに基づく権限と制限を管理する特定の言語については、ライセンスを参照してください。

Copyright© 2020-2022 Xilinx