段階 4: AI エンジンのイベント トレースと解析 - 2023.2 日本語

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

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

この段階の目的は、デザイン パフォーマンスの低下やストール、またはデッドロックの原因となっている AI エンジン カーネルまたはグラフ コンストラクトを特定することです。

次の図に、この段階で使用可能なタスクおよび手法を示します。

図 1. AI エンジンのイベント トレースと解析

この後のセクションでは、このデザイン段階で使用可能なさまざまなデバッグ手法を示します。

AI エンジンのイベント トレース フローを使用したランタイム トレース データの実行および解析

AI エンジン イベント トレース機能では、デザインをハードウェアで実行する際のデザイン トレース データを包括的に表示できます。これは、次の 3 つの手順を実行するプロセスです。

  1. イベント トレースをイネーブルにし、イベント トレースに関連するその他のオプションを指定してデザインをコンパイルします。
  2. ハードウェアでデザインを実行し、イベント トレース データを取得します。
  3. Vitis IDE でトレース サマリ ファイルを開き、上記で取得したトレース データの波形を表示します。

イベント トレース データを使用すると、ストール、デッドロック、またはスループットの低下に関係している AI エンジン カーネルを特定し、ストール/スループットの低下が発生する前のイベントおよびその他の詳細なトレース情報を表示できます。イベント トレース機能の詳細は、ハードウェアでのイベント トレース を参照してください。

図 2. イベント トレース

ハードウェアでイベント トレースを実行する際の特定の手法の詳細は、ハードウェアでのイベント トレースのトラブルシューティング を参照してください。この機能は、デバイスのイベント トレースに使用可能なイベント トレース カウンター、ストリーム、DDR メモリ、およびデザイン リソースにより制限されます。

カーネル間パフォーマンスのプロファイリング

aie::tile::cycles() API を使用して、特定のカーネル内のコード ブロックをプロファイルすることもできます。

ハードウェアでこの値を取得するには、この値をメモリまたは出力ストリームに書き込むことができます。次に、出力ストリームを書き込む例を示します。このデータ ストリームをホスト アプリケーションで調べて、プロファイル データをリードバックできます。

// get the current tile
aie::tile tile=aie::tile::current();
unsigned long long time=tile.cycles(); //cycle counter of [SS1] the AI Engine tile
writeincr(out,time);
{//loop to be profiled
}
time=tile.cycles();//cycle counter of the AI Engine tile
writeincr(out,time);

これは、カーネル コードをプロファイリングする侵入型の方法です。 では、AI エンジン シミュレータでグラフをシミュレーションするのにこの方法を使用することをお勧めします。また、シミュレーションのトレースおよびプロファイル データもこの目的に使用できます。

aie::tile::cycles() API の詳細は、 『AI エンジン カーネルおよびグラフ プログラミング ガイド』 (UG1079) を参照してください。

Vitis IDE デバッガー

Vitis IDE デバッガーを使用してカーネルのソース コードをデバッグすることも可能です。Vitis デバッガーの詳細は、 『Vitis 統合ソフトウェア プラットフォーム資料: アプリケーション アクセラレーション開発』 (UG1393)システム プロジェクトと AI エンジン コンポーネントのデバッグを参照してください。

次の段階: スループットの低下の原因を特定して問題を解決したら、段階 1 に進んでデザインを再実行します。