Vitis IDE でのプロファイル結果の表示 - 2023.2 日本語

AI エンジン ツールおよびフロー ユーザー ガイド (UG1076)

Document ID
UG1076
Release Date
2023-12-04
Version
2023.2 日本語

XRT フローで得られたプロファイル結果を表示するには、次のコマンドを使用します。

vitis -a xrt.run_summary

XSDB フローで Vitis IDE を起動してプロファイリング情報を表示するには、次のコマンドを使用します。

vitis -a aie_trace_profile.run_summary

[Graph] ビューのパフォーマンス アノテーション

ハードウェアのプロファイリング内容に応じて、パフォーマンス データを [Graph] ビューの特定のテーブルに表示させることができます。対応するオブジェクトの上にマウスを置くと、そのパフォーマンスが表示されます。

次の例では、出力スループットがハードウェアでどのように測定され、[Graph] ビューのどこに表示されるかを示します。

  1. xrt.ini に内容を追加します。
    [Debug]
    aie_profile=true
    [AIE_profile_settings]
    tile_based_interface_tile_metrics=25:25:output_throughputs
  2. 続いて、アプリケーションを実行してプロファイリング結果を取得し、Vitis IDE でその結果を表示します。

パフォーマンス データは、Interface Channels のテーブルに含まれます。プロファイルされたポートの上にマウスを置くと、次の図のようにパフォーマンス データが表示されます。

図 1. 出力スループットのパフォーマンス アノテーション

heat_map コア メトリクスと conflicts メモリ メトリクスの例

次の図に、サンプル デザインの 10 タイルに対する heat_map メトリクスのアクティブ時間、ストール時間、累積命令数、およびベクター命令数と、conflicts メトリクスのメモリ競合時間および累積メモリ エラー時間を示します。

図 2. heat_map と conflicts メトリクスの例

AI エンジンが (15,0) に配置されているとします。このアクティブな使用時間 (5.120 ms) 中に 5120000 個のベクターが実行されます。これはアクティブ時間の 87% を占めます。これは良いパフォーマンスで、適切に最適化されたコアであることを示します。

stalls コア メトリクスと dma_locks メモリ メトリクスの例

次の図に、サンプル デザインの 10 タイルに対する stalls メトリクスのメモリ ストール時間、ストリーム ストール時間、カスケード ストール時間、およびロック ストール時間と、dma_locks メトリクスの累積 DMA アクティビティ時間および累積 DMA ロック回数を示します。

図 3. stalls と dma_locks メトリクスの例

コア (24,2) では、DMA は 70.645 ms 間 (7780 万個の命令) アクティブですが、298 回停止しています。

execution コア メトリクスと conflicts メモリ メトリクスの例

次の図に、サンプル デザインの 10 タイルに対する execution メトリクスの累積命令数、ベクター命令数、ロード命令数、ストア命令数と、conflicts メトリクスのメモリ競合時間および累積メモリ エラー時間を示します。

図 4. execution と conflicts メトリクスの例

コア (15,1) には、マイナーですがメモリ競合がいくつかあり、これを特定する必要があります。発生が少ないのは、DMA やその他のカーネル アクセスの干渉が原因である可能性があります。

read_throughputs と write_throughputs AI エンジン メトリクスおよび dma_stalls_s2mm と dma_stalls_mm2s AI エンジン メモリ メトリクスの例

次の図に、サンプル デザインの 10 タイルに対する read_throughputs および write_throughputs メトリクスの一部である、ストリーム読み出し命令数、ストリーム書き込み命令数、カスケード読み出し命令数、およびカスケード書き込み命令数と、dma_stalls_s2mm および dma_stalls_mm2s メトリクスの s2mm channel0 ストール時間、mm2s channel0 ストール時間、s2mm channel1 ストール時間、および mm2s channel1 ストール時間を示します。

図 5. AI エンジンの読み出し/書き込みスループットと AI エンジン メモリのすべての mm2s/s2mm チャネルのストール時間
図 6. カスケード読み出し命令時間とストリーム読み出し命令時間 (単位: パーセント) を示すチャート

AI エンジン カーネルでは、45% 以上の割合でカスケード書き込みとストリーム書き込みが発生していることが分かります。これは、ストリーム スループットがメモリ スループットよりもはるかに小さいため、AI エンジンをアクティブにしておくために必要です。

heat_map コア メトリクスと dma_locks メモリ メトリクスの例

次の図に、サンプル デザインの 10 タイルに対する heat_map メトリクスのアクティブ時間、ストール時間、累積命令数、およびベクター命令数と、dma_lock メトリクスの累積 DMA アクティビティ時間および累積 DMA ロック回数を示します。

図 7. heat_map と dma_locks メトリクスの例

累積 DMA アクティビティ時間と累積 DMA ロック回数により、ロック取得数と DMA を介して転送されるデータ数に不一致がないかどうかを確認できます。ロック回数の相対的な数は、各コアの相対的な反復回数を解釈するのにも使用できます。

input_throughputs インターフェイス メトリクスの例

次の図に、8 x 8 カスケード タイル デザインの input_throughputs:0 メトリクスの一部として、PLIO レベルでのデザインの入力スループットを示しています。

図 8. input_throughputs:0 インターフェイス メトリクスの例

このグラフでは、すべての入力 PLIO のチャネル 0 スループットは約 95% で、達成可能な最大値に近い値です。このプロファイリング手順の後、AI エンジンがデータ不足になっていないことを確認します。

Vitis IDE のレポートの統合

プロファイリング段階では、実行時にすべてのメトリクスが同時に使用されるわけではありません。xrt.ini で異なるプロファイル メトリック セットを使用してボードを再起動することにより、ハードウェアでデザインを複数回実行できます。通常、AI エンジン インターフェイス スループット プロファイリングでは、実行時に 1 つのチャネル (すべての PLIO で同じ) をプロファイリングできます。複数のチャネルのプロファイリングには、複数の実行が必要になります。

Vitis IDE では、同じデザインの異なる実行に関する複数のレポートを統合できます。これにより、たとえば複数のインターフェイス チャネルのスループットを表示できます。vitis -a を実行してデザインの特定の実行の xrt.run_summary が表示されているときに、次の図に示すように、メイン ツールバーおよびウィンドウ ツールバーの [+] ボタンをクリックしてほかの xrt.run_summary レポートを開くことができます。

図 9. メイン ツールバーの [Add] (+) ボタン
図 10. ウィンドウ ツールバーの [Add] (+) ボタン

入力 PLIO チャネル 0 および 4 と出力 PLIO チャネル 0 のプロファイリング データを統合すると、Vitis IDE で次の表を表示できます。

図 11. チャネル 0 および 4 入力とチャネル 0 出力の PLIO スループット