- 作成したグラフをコンパイルするには、次のコマンドを実行します (詳細は
『AI エンジン ツールおよびフロー ユーザー ガイド』 (UG1076) の AI エンジン グラフ アプリケーションのコンパイル参照)。
aiecompiler project.cpp
プログラムは project.cpp という名前です。
aiecompiler
は指定された入力グラフを読み出して AI エンジン アレイにコンパイルし、各種レポートを作成して Work ディレクトリに出力ファイルを生成します。 - C++ 入力を解析して JSON (JavaScript Object Notation) で表されるグラフィカルな中間形式に変換後、
aiecompiler
はリソース マッピングとスケジューリング解析を実行し、グラフ内のカーネル ノードを AI エンジン アレイのプロセッシング コアにマップし、データ バッファーをメモリ バンクにマップします。JSON 表現には、マップ情報が含まれます。各 AI エンジンには、マップされているすべてのカーネルのスケジュールも必要です。入力グラフはまず、同じコアにマップされるカーネルのグループに分割されます。
マップの出力は、project_mapping_analysis_report.txt に表形式で表示されます。これは、ノードのプロセッシング コアへのマップと、データ バッファーのメモリ バンクへのマップをレポートします。プロセッサ間の通信は、ピンポン バッファーとして適切にダブル バンクされます。
-
aiecompiler
は必要なロック、メモリ バッファー、DMA チャネル、ディスクリプターを割り当て、グラフを AI エンジン アレイにマップするための配線情報を生成します。コア上のすべてのカーネルをスケジューリングする各コアのメイン プログラムを合成し、必要なロック機構とバッファー間のデータ コピーをインプリメントします。各コアの C/C++ プログラムはコンパイルされ、ロード可能な ELF ファイルを生成します。aiecompiler
は、main
アプリケーションからグラフの初期化、実行、および終了を制御するための制御 API、およびシミュレータ コンフィギュレーション スクリプト scsim_config.json も生成します。これらはすべて、Work ディレクトリのサブフォルダーに保存されます (詳細は 『AI エンジン ツールおよびフロー ユーザー ガイド』 (UG1076) の AI エンジン グラフ アプリケーションのコンパイルを参照)。 -
AI エンジン グラフをコンパイル後、
aiecompiler
はコンパイル結果を<graph-file-name>.aiecompile_summary
という名前のサマリとして生成します。これは、Vitis IDE で表示できます。このサマリには、複数のレポートと、コンパイル済みビルドにインプリメントされた AI エンジン アプリケーションのステートを表す図が含まれます。このサマリは、aiecompiler
の--workdir
オプションで指定する作業ディレクトリ (デフォルトでは ./Work) に出力されます。aiecompiler
サマリを開くには、次のコマンドを使用します。vitis -a ./Work/graph.aiecompile_summary
- グラフを実行するには、次のコマンドを実行します (詳細は
『AI エンジン ツールおよびフロー ユーザー ガイド』 (UG1076) の AI エンジン グラフ アプリケーションのコンパイルを参照)。
aiesimulator –-pkg-dir=./Work
これにより、制御プログラムが
main
アプリケーションである SystemC ベースのシミュレータが起動します。制御プログラムで使用されるグラフ API は、スタティック配線の設定、DMA のプログラム、個々のコアへの ELF ファイルの読み込み、AI エンジン アレイの実行の開始など、AI エンジン アレイを設定します。シミュレーションの最後に、出力データが aiesimulator_output ディレクトリに生成されます。これは、基準データと一致する必要があります。
グラフは、ブート時にハードウェアに読み込むか、ホスト アプリケーションで読み込むことができます。ハードウェアでのグラフの運用および関連するフローの詳細は、 『Vitis 統合ソフトウェア プラットフォーム資料: アプリケーション アクセラレーション開発』 (UG1393) のシステムのビルドと実行を参照してください。
注記:
AI エンジン グラフの次回のコンパイルでは、変更された AI エンジン カーネルのみが再コンパイルされます。変更されていないカーネルは再コンパイルされません。