AI エンジン グラフ アプリケーションのシミュレーション - 2023.2 日本語

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

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

この章では、AI エンジン アプリケーションを異なるレベルの抽象化、精度、および速度でシミュレーションするために使用可能なさまざまな実行ターゲットについて説明します。AI エンジン グラフは、4 つのシミュレーション環境でシミュレーションできます。

x86 シミュレータは、x86 論理シミュレータ に説明されているように、高速論理シミュレータです。AI エンジン グラフの論理シミュレーションに使用でき、カーネルとグラフの機能開発および検証に有益です。ただし、タイミング、リソース、またはパフォーマンス情報は提供されません。

AI エンジン シミュレータ (aiesimulator) は、AI エンジン アレイのタイミングおよびリソースをモデル化し、NoC、DDR メモリにはトランザクション レベルの SystemC モデルを使用します。これにより、AI エンジン アプリケーションのパフォーマンス解析を簡単に実行でき、AI エンジン リソースの使用をサイクル近似のタイミング情報を使用して正確に見積もることができます。

x86 論理シミュレータと AI エンジン シミュレータの両方で、PL インターフェイスから AI エンジン はタイミングなしの外部トラフィックで実行できます。また、どちらのシミュレータも、ユーザー グラフの main() 関数を C テストベンチとして使用し、AI エンジンを設定および制御します。このテストベンチ データの入力と出力にはタイミングはありません。また、ユーザー グラフの main() 関数は仮想シミュレーション プラットフォームとして機能します。

ヒント: x86 論理シミュレータや AI エンジン シミュレータの使用に加え、コンパイル済みの AI エンジン テスト ハーネスを使用して、VCK190 ボード上で AI エンジン グラフをテストできます。このテスト ハーネスは、AI エンジン シミュレーション環境からハードウェアでのテストへの移行を非常に簡単かつスムーズに実行できるように設計されています。テスト ハーネスを使用することで、シミュレーションで実行される AI エンジン グラフを、わずか数分で、軽微な修正を加えるだけでハードウェアに取り込むことができます。AI エンジン テスト ハーネスの詳細は、https://xilinx.github.io/AI-Engine-Test-Harness/ を参照してください。

AI エンジン グラフ、PL ロジック、AI エンジンおよび PL を制御する XRT ベースのホスト アプリケーションを含むシステム全体の高速論理シミュレーションを実行するには、AMD Vitis™ ソフトウェア エミュレーション フローを使用する必要があります。ソフトウェア エミュレーション フローでは、HLS ベースのカーネルまたは RTL ベースのカーネルの C モデルを使用して、AI エンジン グラフにインターフェイスし、ホスト コード (ハードウェア上でも実行可能) を使用して制御できます。このフローには、AI エンジンおよび PS の x86 機能モデルが含まれます。PS の x86 機能モデルは、ソフトウェア エミュレーション フローのデフォルト モデルです。PS の代替モデルとして、Arm QEMU モデルも用意されています。ソフトウェア エミュレーションの実行に関する詳細は、 『Vitis 統合ソフトウェア プラットフォーム資料: アプリケーション アクセラレーション開発』 (UG1393)エミュレーション ターゲットの実行を参照してください。

特定のボードおよびプラットフォームで AI エンジン グラフおよび PL ロジックと、AI エンジンおよび PL を制御する XRT ベースのホスト アプリケーションを含むシステム全体をシミュレーションする準備ができたら、Vitis ハードウェア エミュレーション フローを使用する必要があります。このフローには、AI エンジンの SystemC モデル、NoC、DDR メモリ、PL カーネル (RTL)、および PS (QEMU で実行) のトランザクション レベルの SystemC モデルが含まれます。プラットフォームまたはデザインの RTL ロジックとテストベンチを含めることもできます。

次の表に、4 つのシミュレーション フローと、それらの機能レベルまたはパフォーマンス レベルのデバッグ サポートの有無、およびソース コードのデバッグのサポート レベルを示します。また、AI エンジン デザイン開発の適切な段階で推奨されるシミュレーション フローも示します。

表 1. シミュレーション フロー
デザイン開発段階 シミュレーション ツール フロー ソース レベルのデバッグ シミュレーション デバッグ タイプ
AI エンジン カーネルおよびグラフのデバッグ x86 シミュレータ AI エンジンの機能デバッグ
AI エンジン グラフのパフォーマンスのデバッグ AI エンジン シミュレータ AI エンジン コンパイラで生成されたアセンブリ コードをステップ スルーしてコードを最適化可能だが、ソース レベルの可視性はコンパイラでの最適化によって制限される場合あり AI エンジンのパフォーマンス解析およびデバッグ
システム レベルのシミュレーションおよびパフォーマンスのデバッグ Vitis ハードウェア エミュレーション 可能 (ただし、コンパイラでの最適化によりソース レベルの可視性が制限される) システムのパフォーマンス解析およびデバッグ

シミュレーション モデル

次の表に、シミュレーション フローをリストし、AI エンジン デザイン開発の適切な段階で推奨されるシミュレーション フローと、さまざまな AMD Versal™ アーキテクチャ ドメインに使用されるシミュレーション モデルのタイプを示します。シミュレーション モデルのタイプと使用されるシミュレーション ツール フローにより、シミュレーション結果の精度が決まります。

表 2. シミュレーション モデル
シミュレーション ツール フロー AI エンジン カーネル PL カーネル PL I/O サポート PL プラットフォーム NoC/DDR モデル PS モデル
x86 シミュレータ x86 スレッド N/A ファイル IO/外部トラフィック ジェネレーター N/A N/A N/A
AI エンジン シミュレータ SystemC N/A ファイル IO/外部トラフィック ジェネレーター N/A SystemC N/A
Vitis ハードウェア エミュレーション SystemC SystemC/RTL/HLS-C PL カーネルが/外部トラフィック ジェネレーター RTL/SystemC SystemC QEMU

シミュレーション機能

デザインを aiesimulator またはハードウェア エミュレーションで実行すると、プロファイリング データを収集できます。このデータを解析すると、カーネルの効率、各 AI エンジン カーネルに関連するストール時間とアクティブ時間を計測し、パフォーマンスが最適でない可能性のある AI エンジン カーネルを特定できます。これにより、デザインのレイテンシ、スループット、および帯域幅のデータを収集できます。プロファイル データの実行および解析に関する詳細は、シミュレーション中の AI エンジン グラフ アプリケーションのパフォーマンス解析 を参照してください。

イベント トレース機能を使用すると、プログラム実行のシステム レベルのビューを収集して解析できます。これは、プログラムの実行中に、正しさやパフォーマンス問題などの問題を特定するのに役立ちます。AI エンジン アーキテクチャでは、シミュレーションおよびハードウェア エミュレーション中にイベントをトレース データとして生成、収集、およびストリーミングすることがサポートされます。イベント トレース データの実行および解析に関する詳細は、シミュレーション中の AI エンジン グラフ アプリケーションのパフォーマンス解析 を参照してください。

x86simulatorおよび aiesimulator は、graph.cppmain() 関数を使用してデザインをシミュレーションします。QEMU エミュレーションは、ホス トアプリケーションのソソフトウェア エミュレーションとハードウェア エミュレーションでサポートされています。なお、ソフトウェア エミュレーションでは、QEMU のサポートはオプションです。ソフトウェア エミュレーションでは、Linux-XRT をターゲットとするホスト アプリケーションを作成し、このホスト アプリケーションをエミュレートできます。ハードウェア エミュレーションでは、ベアメタルまたは Linux-XRT をターゲットとするホスト アプリケーションを作成し、そのホスト アプリケーションをエミュレートすることもできます。テストベンチ データは、仮想テストベンチ プラットフォームとして機能するグラフの main() 関数を使用して、x86 シミュレータおよび AI エンジン シミュレータに供給できます。シミュレーション フローには、さまざまなレベルのテストベンチ サポートがあります。テストベンチ データは、ファイル ベースまたは外部トラフィック ジェネレーターのいずれかです。この機能の詳細は、 『Vitis 統合ソフトウェア プラットフォーム資料: アプリケーション アクセラレーション開発』 (UG1393)AI エンジン デザインでのトラフィック ジェネレーターの使用 を参照してください。

AI エンジン カーネル間のデータフローは、データ スナップショット ファイルまたは Vitis IDE で表示できます。x86 シミュレータ スナップショット機能の詳細は、データ スナップショット を参照してください。AI エンジン シミュレータの実行結果のトレース データを視覚する方法は、[Trace] ビューのデータの可視化 を参照してください。

次の表に、シミュレーション フローでサポートされるシミュレーション機能を示します。

表 3. シミュレーション機能
シミュレーション ツール フロー トレース プロファイル アプリケーション main() テストベンチ サポート AI エンジン データフローの可視性
x86 シミュレータ × × graph.cpp の main() 関数 ファイル ベース/外部トラフィック ジェネレーター 〇 (スナップショット機能を使用)
AI エンジン シミュレータ graph.cpp の main() 関数 ファイル ベース/外部トラフィック ジェネレーター 〇 (Vitis IDE の [Trace] ビューを使用)
Vitis ハードウェア エミュレーション ベアメタルまたは Linux-XRT をターゲットとするホスト アプリケーションの main() 関数 HLS-C/RTL データ ムーバー/外部トラフィック ジェネレーター 〇 (Vitis IDE の [Trace] ビューを使用)
注記: シミュレーションの main 関数には、必ず戻り値を与える必要があります。return 文がなければ、aiecompiler でエラーが発生することがあります。