AI エンジン グラフ アプリケーションのコンパイル
この章では、AI エンジン コンパイラ (aiecompiler) に渡されるすべてのコマンド ライン オプションについて説明します。コンパイラは、データフロー グラフのコード、個々のカーネルのコードを使用し、シミュレータ、エミュレーター、および AI エンジン デバイスなどのさまざまな AI エンジン ターゲット プラットフォームで実行可能なイメージを生成します。AI エンジン コンパイラは、グラフをスタティックにコンパイルし、カーネルを AI エンジンにマップおよび配置します。
AI エンジン グラフおよびカーネルは、個別にコンパイルするか、エミュレーションまたはハードウェアにおいて AI エンジン プロセッサ アレイで実行するスタンドアロン アプリケーションとしてコンパイルできます。グラフおよびカーネルは、システム デザインの一部として使用することも可能で、その場合は AI エンジン グラフが Versal™ デバイスのエンベデッド プロセッサ上で実行される ELF アプリケーションおよびデバイスのプログラマブル ロジック (PL) で実行されるプログラマブル ロジック カーネルと統合されます。スタンドアロン コンフィギュレーションでもシステムの一部としてコンパイルする場合でも、グラフおよびカーネルのコンパイルには AI エンジン コンパイラが使用されます。
Vitis IDE の使用 に示すように、プロジェクトのビルド設定を作成および管理し、AI エンジン コンパイラを実行するには、Vitis™ IDE を使用できます。または、Vitis ツール フローを使用したアプリケーションの統合 で説明されているように、コマンド ラインでスクリプトまたは makefile を使用してプロジェクトをビルドできます。どちらの方法を使用しても、シミュレーションまたはエミュレーションを実行してグラフ アプリケーションまたは統合システム デザインを検証、対話型デバッグ環境でデザインをデバッグ、およびデザインをビルドしてハードウェアで実行および運用できます。どの方法を使用する場合でも、まず環境を設定することから開始します。
Vitis ツール環境の設定
AI エンジン ツールは、Vitis 統合ソフトウェア プラットフォームの一部としてインストールされます。そのため、AI エンジン コンパイラや AI エンジン シミュレータなどの AI エンジン ツールを実行するには、Vitis ツールを設定する必要があります。Vitis 統合ソフトウェア プラットフォームには次の 2 つの構成要素があり、有効な Vitis ツール ライセンスと共に、これらをインストールおよび設定する必要があります。
- Vitis ツールおよび AI エンジン ツール
- ターゲット Vitis プラットフォーム (AI エンジン アプリケーション用の
xilinx_vck190_base_202110_1プラットフォームなど)
詳細は、『Vitis 統合ソフトウェア プラットフォーム資料: アプリケーション アクセラレーション開発』 (UG1393: 英語版、日本語版) を参照してください。
Vitis ソフトウェア プラットフォームのこれらの構成要素をインストールしたら、次のスクリプトを実行して、特定のコマンド シェルで実行できるよう環境設定する必要があります。
#setup XILINX_VITIS and XILINX_HLS variables
source <Vitis_install_path>/Vitis/<version>/settings64.csh
settings64.sh および setup.sh スクリプトも同じディレクトリに含まれています。最後に、次の環境変数を設定して、Vitis IDE および AI エンジン ツールで使用可能なプラットフォームの場所を指定します。
setenv PLATFORM_REPO_PATHS <path to platforms>
PLATFORM_REPO_PATHS 環境変数には、プラットフォーム ファイル (XPFM) を含むディレクトリを指定します。これにより、プラットフォームのフォルダー名のみを使用してプラットフォームを指定できるようになります。ツールのインストールおよび設定を確認するには、次のいずれかのコマンドを使用します。
which vitis
which aiecompiler
プラットフォームのインストールを確認するには、次のコマンドを使用します。
platforminfo --list
入力
AI エンジン コンパイラは、複数の形式の入力を使用し、AI エンジン デバイスで実行する実行可能なアプリケーションを生成します。AI エンジン コンパイラを実行するコマンド ラインは、次のとおりです。
aiecompiler [options] <Input File>
説明:
<Input File>: AI エンジン グラフ用のmain()アプリケーションを定義するデータフロー グラフ コードを指定します。入力フロー グラフは、データフロー グラフ言語を使用して指定します。データフロー グラフの詳細は、カーネルを含むデータフロー グラフの作成 を参照してください。
次に、AI エンジン コンパイラ コマンドの例を示します。
aiecompiler --verbose --pl-freq=100 --workdir=./myWork --platform=xilinx_vck190_202110_1.xpfm\
--include="./" --include="./src" --include="./src/kernels" --include="./data" --include="${XILINX_HLS}/include" \
./src/graph.cpp
コマンド ラインに使用可能な入力オプションには、次のものがあります。
--constraints=<jsonfile>: ロケーション制約や配置境界ボックスなどの制約を指定します。
出力
デフォルトでは、AI エンジン コンパイラによりすべての出力が Work ディレクトリに生成され、さらに libadf.a ファイルが生成されます。Work はツールを起動したディレクトリのサブディレクトリで、libadf.a は Vitis コンパイラの入力として使用されるファイルで、AI エンジン コンパイラを起動したディレクトリに生成されます。出力のタイプと出力ディレクトリの内容は、AI エンジン コンパイラのオプション に説明されているように、--target の指定によります。Vitis コンパイラの詳細は、『Vitis 統合ソフトウェア プラットフォームの資料』 (UG1416) のアプリケーション アクセラレーション開発フローの Vitis コンパイラ コマンド を参照してください。
--workdir オプションを使用します。次の表に、./Work ディレクトリの構造と内容を示します。
| ディレクトリ/ファイル | 説明 | ||||
|---|---|---|---|---|---|
| ./Work/ | |||||
| <name>.aiecompile_summary | コンパイル サマリを含むファイルで、Vitis アナライザーで開くことができます。 | ||||
| config/scsim_config.json | SystemC シミュレータのオプションを指定する JSON スクリプト。AI エンジン アレイ タイルの配置、入力/出力ファイル仕様、およびストリーム スイッチへの接続を含みます。 | ||||
| arch/ | |||||
| logical_arch_aie.larch | AI エンジン アプリケーションのハードウェア要件を記述する JSON ファイル。 | ||||
| aieshim_constraints.json | この JSON ファイルが存在する場合、AI エンジン アプリケーションで指定される AI エンジン アレイとプログラマブル ロジック間のユーザー定義物理インターフェイス制約を表します。 | ||||
| aieshim_solution.aiesol | AI エンジン アレイとプログラマブル ロジック間のインターフェイスをまたぐ論理チャネルから物理チャネルへのマップを記述する JSON ファイル。 | ||||
| cfgraph.xml | AI エンジン アプリケーションのハードウェア要件を記述する XML ファイル。このファイルは、Vitis ツール フローで使用されます。 | ||||
| aie/ | |||||
| Makefile | すべての AI エンジンのコードをコンパイルする Makefile。 | ||||
| <n>_<m>/ | 個々の AI エンジン コンパイル ディレクトリ。 | ||||
| Release/ | ELF ファイルを含む AI エンジン用の Synopsys リリース ディレクトリ。 | ||||
| <n>_<m>.lst | <n>_<m> にあるカーネルのマイクロコード。 | ||||
| <n>_<m>.map | <n>_<m> にあるカーネルのメモリ マップを示します。メモリのサイズ、幅、およびオフセットも含まれます。 | ||||
| scripts/ | Synopsys コンパイラ プロジェクトおよびリンカー スクリプト。 | ||||
| src/ | カーネルおよび main を含むプロセッサのソース ファイル。 |
||||
| ps/c_rts/ | PS との通信をモデル化するための C ベース ランタイム制御を含むディレクトリ。 | ||||
| aie_control.cpp | プログラムに存在する特定のグラフ オブジェクト用の init,run,end グラフ API をインプリメントして生成された AI エンジン制御コード。このファイルをアプリケーション main とリンクして、シミュレータおよびベアメタル用の PS スレッドを作成します。 |
||||
| aie_control_xrt.cpp | プログラムに存在する特定のグラフ オブジェクト用の init,run,end グラフ API をインプリメントして生成された AI エンジン制御コード。このファイルをアプリケーション main とリンクして、Linux アプリケーション用の PS スレッドを作成します。 |
||||
| systemC/ | PS main の SystemC モデルを含むディレクトリ。 |
||||
| Makefile | すべての PS SystemC モデルをコンパイルする makefile。 | ||||
| generated-source/ | PS main の SystemC ラッパー。 |
||||
| generated-objects/ | PS main 用のコンパイル済みの共有ライブラリ。 |
||||
| ps/cdo/ | グラフ コンフィギュレーションおよび初期化用のコンフィギュレーション データ オブジェクト (CDO) フォーマットの生成コード。このファイルは、SystemC-RTL シミュレーションおよび実際のハードウェア実行で使用されます。 | ||||
| Makefile | グラフ CDO をコンパイルする Makefile。 | ||||
| generateAIEConfig | グラフ CDO をビルドする bash スクリプト | ||||
| generated-sources/ | CDO を生成する C++ プログラム。 | ||||
| generated-objects/ | CDO を生成するコンパイル済みプログラム。 | ||||
| pthread/ | |||||
| PthreadSim.c | pthreads を使用して入力フロー グラフから C プログラムに変換されたソース。 |
||||
| sim.out | PthreadSim.c の GCC コンパイルされたバイナリ。 | ||||
| reports/ | |||||
| <graph>_mapping_analysis_report.txt | カーネルから AI エンジン、ウィンドウ バッファーから AI エンジン メモリ グループへの割り当てを示すマップ レポート。 | ||||
| <graph>.png | カーネル グラフの接続と AI エンジン への分割を示すビットマップ ファイル。 | ||||
| <graph>.xpe | 使用されたハードウェア リソースに基づくグラフの見積もり消費電力プロファイルを記述する XML ファイル。このファイルは、Xilinx® Power Estimator (XPE) ツールで使用されます。 | ||||
| sync_buffer_address.json | ローカルおよびグローバル アドレスを含むカーネルの同期バッファー アドレスを示します。 | ||||
| lock_allocation_report.json | ポートとカーネルに関連付けられているロックおよびバッファーを示します。 | ||||
| dma_lock_report.json | AI エンジンへの入力/出力の DMA ロックと、それらが接続されているカーネルとバッファーの情報を示します。 | ||||
| temp/ | AI エンジン コンパイラで生成される一時ファイルが含まれます。これらの一時ファイルは、デバッグに便利です。CF グラフ .o ファイルもデフォルトでここに作成されます。 | ||||
AI エンジン コンパイラのオプション
| オプション名 | 説明 |
|---|---|
--constraints=<string> |
ロケーションや境界ボックスなどの制約は、JSON ファイルを使用して指定できます。このオプションを使用すると、1 つまたは複数の制約ファイルを指定できます。 |
--heapsize=<int> |
各 AI エンジンが使用するヒープ サイズをバイト数で指定します。 スタック、ヒープ、および同期バッファー (32 バイト、グラフ実行回数の情報を含む) には、32768 バイトまでのデータ メモリが割り当てられます。デフォルトのヒープ サイズは 1024 バイトです。ヒープ サイズを異なる値に変更する前に、スタック、ヒープ、および同期バッファー サイズの合計が 32768 バイトを超えていないことを確認してください。 ユーザー グラフに明示的に接続されていない残りのファイル スコープのデータを割り当てるのに使用されます。 |
--stacksize=<int> |
各 AI エンジンが使用するスタック サイズをバイト数で指定します。 スタック、ヒープ、および同期バッファー (32 バイト) には、32768 バイトまでのデータ メモリが割り当てられます。デフォルトのスタック サイズは 1024 バイトです。スタック サイズを異なる値に変更する前に、スタック、ヒープ、および同期バッファー サイズの合計が 32768 バイトを超えていないことを確認してください。 スタック割り当て済みのローカル変数およびレジスタあふれを含む標準コンパイラ呼び出し規則として使用されます。 |
--pl-freq=<value> |
すべての PLIO のインターフェイス周波数を MHz で指定します。デフォルトの周波数は、AI エンジン周波数の 1/4 で、サポートされる最大周波数は AI エンジンの周波数の 1/2 です。各インターフェイス固有の PL 周波数は、グラフ内で指定します。 |
--pl-register-threshold=<value> |
レジスタの付いた AI エンジン-PL クロック乗せ換えの周波数を MHz で指定します。デフォルトの周波数は、AI エンジンの周波数 (デバイスのスピード グレードによる) の 1/8 です。 注記: AI エンジン アレイの周波数の 1/4 を超える値は無視され、1/4 の値が使用されます。 |
| オプション名 | 説明 |
|---|---|
--enable-ecc-scrubbing |
使用されているすべての AI エンジン ECC スクラブをイネーブルにします。このオプションにより、AI エンジン ELF CDO の生成時に ECC スクラブがイネーブルになります。コアごとに 1 つのパフォーマンス カウンターが使用されます。ECC スクラブは、デフォルトでオン (true) になっています。 |
| オプション名 | 説明 |
|---|---|
--kernel-linting |
グラフとカーネルの間の一貫性チェックを実行します。デフォルトは false です。 |
--log-level=<int> |
詳細ログのレベル (0: ログなし、5: すべてのデバッグ メッセージ) を指定します。デフォルトのレベルは 1 です。 注記:
-–verbose を指定した場合のデフォルトのレベルは 5 です。 |
--verbose |
AI エンジン コンパイラの出力を詳細出力に設定し、コンパイルのさまざまな段階でコンパイラ メッセージを出力します。これらのデバッグおよびトレース ログは、コンパイル プロセスに関して有用なメッセージを提供します。 |
| オプション名 | 説明 |
|---|---|
--target=<hw|x86sim> |
AI エンジン コンパイラでは、複数のビルド ターゲットがサポートされます。デフォルトは hw です。
|
| オプション名 | 説明 |
|---|---|
--include=<string> |
コンパイラのフロンドエンド処理に使用するインクルード パスにディレクトリを追加します。 1 つまたは複数のインクルード ディレクトリを指定します。 |
--output=<string> |
入力データフロー グラフ ファイルに対してフロントエンドで生成する output.json ファイルを指定します。この出力ファイルは、AI エンジン デバイスのマップとコードを生成するため、バックエンドに渡されます。このオプションは、ほかのタイプの入力では無視されます。 |
--platform=<string> |
ハードウェア設計およびその RTL 協調シミュレーションを実行する際に使用可能なハードウェアおよびソフトウェア コンポーネントを定義した Vitis プラットフォーム ファイルへのパスを指定します。 |
--workdir=<string> |
デフォルトでは、コンパイラですべての出力が現在のディレクトリの Work サブディレクトリに生成されます。異なる出力ディレクトリを指定する場合に、このオプションを使用します。 |
| オプション名 | 説明 |
|---|---|
--help |
使用可能な AI エンジン コンパイラ オプションを、ここで示すグループ順に表示します。 |
--help-list |
AI エンジン コンパイラ オプションをアルファベット順に表示します。 |
--version |
AI エンジン コンパイラのバージョンを表示します。 |
| オプション名 | 説明 |
|---|---|
--no-init |
AI エンジン データ メモリのウィンドウ バッファーの初期化を無効にします。このオプションを指定すると、SystemC-RTL 協調シミュレーション フレームワークへのバイナリ イメージの読み込みが高速になります。 ヒント: これは、スタティックに初期化されたルックアップ テーブには影響しません。 |
--nodot-graph |
デフォルトでは、AI エンジン コンパイラによりユーザーが指定したグラフおよび AI エンジンへの分割を可視化した .dot および .png ファイルが生成されます。このオプションを指定すると、.dot ファイルは出力されません。 |
| オプション名 | 説明 |
|---|---|
--Xchess=<string> |
各 AI エンジンのコードのコンパイルに使用される CHESS コンパイラにカーネル特定のオプションを渡すために使用できます。 オプション文字列は |
--Xelfgen=<string> |
コンパイラの ELF 生成段階に追加のコマンド ライン オプションを渡します。現在のところ、この段階では 1 回の make コマンドですべての AI エンジン ELF ファイルが生成されます。並列コンパイルの数を 4 に制限するには、 注記: コンパイル中にログに bad_alloc を含むエラーが表示された場合、または Vitis IDE がクラッシュした場合、ワークステーションのメモリ容量が十分でない可能性があります。マシンで使用可能なメモリ容量を増やす以外に可能な回避策としては、コード生成段階でコンパイラにより使用される並列処理を制限する方法があります。これには、GUI の CodeGen オプション -j1 または -j2 を使用するか、コマンド ラインで -Xelfgen=-j1 または -Xelfgen=-j2 を使用します。 |
--Xmapper=<string> |
コンパイラのマップ段階に追加のコマンド ライン オプションを渡します。次に例を示します。これらのオプションは、マップまたは配線段階でデザインが収束しない場合、またはメモリ バンクの競合を削減してパフォーマンスを改善する場合に、指定してみることができます。 オプションのリストと説明は、マップおよび配線オプション を参照してください。 |
--Xpreproc=<string> |
すべてのソース コード コンパイル (AIE/PS/PL/x86sim) の PREPROCESSOR 段階に一般オプションを渡します。次に例を示します。 |
--Xpslinker=<string> |
PS LINKER 段階に一般オプションを渡します。次に例を示します。 |
--Xrouter=<string> |
ROUTER 段階に一般オプションを渡します。次に例を示します。 |
| オプション名 | 説明 |
|---|---|
--xlopt=<int> |
opt レベルに基づいて、カーネル最適化の組み合わせをイネーブルにします。有効な値は 0 ~ 2 で、デフォルトは 1 です。
|
--Xxloptstr=<string> |
xlopt レベル 2 で最適化をイネーブル/ディスエーブルにするオプション文字列。
|
マップおよび配線オプション
| オプション | 説明 |
|---|---|
| DisableFloorplanning | マップの自動フロアプランをディスエーブルにします。このオプションは、多数の制約を設定しており、ロケーション制約を使用してマップを制御する場合に便利です。 |
| BufferOptLevel[1-9] | メモリ バンクの競合を削減してスループットを向上します。BufferOptLevel の値を大きくすると、同じメモリ バンクにマップされるバッファー数を削減され、バンクの競合が発生する可能性が下がるので全体的なパフォーマンスに影響します。BufferOptLevels の値を大きくするとマップされる領域の全体的なサイズが増加し、ソリューションを見つけられなくなる可能性があります。デフォルトの BufferOptLevels は BufferOptLevel0 です。 |
| disableSeparateTraceSolve | トレース デバッグ機能を使用する際、デフォルトでは AI エンジン のマップ ツールによりすべての PLIO/GMIO が元のデザインの場所に配置されます。ただし、元のソリューションにトレース GMIO を配置するスペースがない場合は、デザイン PLIO を移動しない限りソリューションはありません。その場合にこのオプションを使用できます。 |
aiecompiler --constraints Work/temp/graph_aie_mapped.aiecst src/graph.cpp| オプション | 説明 |
|---|---|
| enableSplitAsBroadcast | 分割ノードからのすべての分割ネットを 1 つのネットとして扱い、100% を複数のポイントにブロードキャストします。このブロードキャスト ネットは、デザインのほかのパケット スイッチ ネットとリソースを共有しません。このオプションは、ノード分割の後に packetstream ネットへの干渉によりスループットが低下する場合に使用できます。 |
| dmaFIFOsInFreeBankOnly | DMA FIFO がほかのバッファーがマップされていないメモリ バンクにのみ挿入されるよう指定します。このオプションは、DMA FIFO バッファーが同じバンクに配置されているほかのバッファーと同時にアクセスされるためにメモリがストールする場合に使用できます。 |
| disableSSFifoSharing | ネットの複数の終端でストリーム スイッチ FIFO を共有する機能をディスエーブルにします。このオプションは、各終端に個別に FIFO を付けるのに十分な数のストリーム スイッチ FIFO がない場合にのみ使用するようにしてください。 |
Vitis アナライザーでのコンパイル結果の表示
AI エンジン グラフのコンパイル後、AI エンジン コンパイラは Vitis アナライザーで表示するための <graph-file-name>.aiecompile_summary というコンパイル結果のサマリを生成します。このサマリには、複数のレポートと、コンパイル済みビルドにインプリメントされた AI エンジン アプリケーションのステートを表す図が含まれます。このサマリは、--workdir オプションで指定された AI エンジン コンパイラの作業ディレクトリ (デフォルトは ./Work) に保存されます。
AI エンジン コンパイラ サマリを開くには、次のコマンドを使用します。
vitis_analyzer ./Work/graph.aiecompile_summary
Vitis アナライザーが開き、レポートの Summary ページが開きます。Report Navigator ビューには、Summary で表示可能なレポートがリストされます。Vitis アナライザーの詳細は、『Vitis 統合ソフトウェア プラットフォームの資料』 (UG1416) のアプリケーション アクセラレーション開発フローの Vitis アナライザーの使用 を参照してください。
次のレポートがリストされます。
- Summary
- 最上位のレポートで、日付、ツール バージョン、グラフへのリンク、ビルドの作成に使用されたコマンド ラインなどのビルドの詳細をレポートします。
- [Kernel Guidance]
- カーネル最適化に関するガイダンスを示すさまざまなメッセージを表示します。
- Graph
- さまざまなカーネルを介するデータフローを示す AI エンジン グラフのフロー図を示します。必要に応じて、グラフの表示を拡大/縮小したり、移動したりできます。Reports ビューの下部には、カーネル、バッファー、ポート、およびネットに関する情報を含む表が表示されます。グラフ図のオブジェクトをクリックすると、そのオブジェクトが表でハイライトされます。グラフおよびアレイの詳細 を参照してください。
- Array
- Versal デバイスの AI エンジン プロセッサ アレイをグラフィカルに表示します。グラフ カーネルおよび接続は、アレイのコンテキスト内に配置されます。アレイ図を拡大/縮小したり、エレメントを選択できます。アレイのオブジェクトを選択すると、そのオブジェクトが Reports ビューの下部にある表でハイライトされます。注記: [Graph] および [Array] レポートは、同じ表を使用します。いずれかのビューで項目を選択すると、両方で選択されます。たとえば、[Graph] ビューでネットを選択すると、そのネットが [Array] ビューでも選択されます。
- [Constraints]
- グラフ内で使用されるすべての制約を表示します。
- Mapping Analysis
- テキスト レポート graph_mapping_analysis_report.txt を表示します。グラフのデバイス リソースへのブロック マップ、ポート マップ、およびメモリ バンク マップをレポートします。
- DMA Analysis
- グラフからの DMA アクセスのサマリを含むテキスト レポート DMA_report.txt を表示します。
- Lock Allocation
- ポート インスタンスの DMA ロックをリストするテキスト レポート Lock_report.txt を表示します。
- [Core Compilation]
- シングル カーネル コンパイルのログ ファイルを表示します。
次の図に、Vitis アナライザーで開いている graph.aiecompile_summary レポートを示します。Array ビューが表示されており、図と表で AI エンジン カーネルが選択されており、カーネルのソース コードが Source Code ビューに表示されています。
グラフおよびアレイの詳細
Vitis アナライザーの [Graph] ビューと [Array] ビューには、グラフおよびカーネルの詳細を示す複数の表があります。次のセクションでは、各表の詳細と表示される情報を説明します。
カーネル
Kernels の表には、ADF グラフで使用されるカーネルに関する詳細情報が示されます。次の図に、2 つのカーネル interpolator および classify の例を示します。次のコード例は、fir_27t_sym_hb_2i および classifier カーネル関数をグラフにカーネルとしてインスタンシエートします。
interpolator = kernel::create(fir_27t_sym_hb_2i);
classify = kernel::create(classifier);
| 列 | 説明 |
|---|---|
| Graph Instance | デザイン グラフと、サブグラフおよびカーネルの階層を示します。 |
| ID | aiecompiler でカーネルに割り当てられた ID。 |
| Kernel | カーネル関数名。これは、グラフ クラスにインスタンシエートされたカーネル名とは異なります。上記のコードでは、fir_27t_sym_hb_2i が関数名で、interpolator としてインスタンシエートされます。 |
| Runs on | カーネルの実行場所。これは常に AI エンジンです。 |
| Source | カーネル ソース ファイル。このファイル名をクリックすると、カーネルのソース ファイルが開きます。 |
| Column | カーネルがマップされる AI エンジンの列。 |
| Row | カーネルがマップされる AI エンジンの行。 |
| Schedule | 複数のカーネルが同じタイル (同じ列、行) にマップされている場合の実行順。値が 0 の場合、スケジューリングされていません。 |
| Runtime Ratio | runtime<ratio>(<kernel>) = n 制約を使用してグラフに設定されたランタイム比。 |
| Graph Source | ソース ファイル (graph.h) とカーネルがインスタンシエートされる行番号。リンクをクリックすると、ソース ファイルのその行が開きます。 |
プログラマブル ロジック (PL)
PL の表には、ADF グラフへの PLIO 接続に関する詳細情報が示されます。たとえば次の図では、グラフに 4 つの PLIO オブジェクトが関連付けられています。PLIO 接続の名前、PLIO データ接続の幅、および PLIO 接続に関連付けられているシミュレーション テストベンチ ファイルは、次のとおりです。
PLIO *in0 = new PLIO("DataIn1", adf::plio_32_bits,"data/input.txt");
PLIO *ai_to_pl = new PLIO("clip_in",adf::plio_32_bits, "data/output.txt");
PLIO *pl_to_ai = new PLIO("clip_out", adf::plio_32_bits,"data/input2.txt");
PLIO *out0 = new PLIO("DataOut1",adf::plio_32_bits, "data/output2.txt");
| 列 | 説明 |
|---|---|
| Name | PLIO 接続のポート名と、入力/出力の別を示します。 |
| Data Width | コンストラクターで定義されている PLIO 接続のデータ幅。有効な幅は、32 ビット、64 ビット、または 128 ビットです。 |
| Frequency (MHz) | PLIO コンストラクターで定義 (オプション) された PLIO 接続の周波数 (MHz) を示します。 |
| Buffers | PLIO 接続に使用されているバッファーの数を示します。PLIO ポートが AI エンジン カーネルのウィンドウ ポートに接続されている場合、2 つのバッファーが使用され、ピンポン バッファーであることが示されます。PLIO ポートから AI エンジン カーネルのストリーム ポートへの接続には、バッファーは使用されません。 |
| Connected Ports | PLIO が接続されているポートの数を示します。この PLIO データは、AI エンジンの複数のデスティネーションにマルチキャストできます。詳細は、マルチキャスト サポートを参照してください。 |
| Column | aiecompiler で割り当てられる PLIO により使用されるインターフェイス列です。有効な値は、0 ~ 49 です。 |
| Channel | PLIO で使用されるインターフェイス列内のチャネルを示します。 |
| Packet ID | パケット スイッチング機能により、データのパケットを複数のデスティネーションに送信できます。これらのデータ パケットは、PL と AI エンジン の間で送信できます。この列には、パケット スイッチングが使用されている場合に使用されるパケットの ID が表示されます。詳細は、明示的パケット スイッチングを参照してください。 |
バッファー
buf# および buf#d はピンポン バッファーを示します。| 列 | 説明 |
|---|---|
| Name | バッファーが割り当てられている接続の名前。 |
| ID | AI エンジン コンパイラによりバッファーに割り当てられた ID。 |
| Type | 使用するバッファーのタイプ。[Memory] または [Stream] のいずれかです。ウィンドウへの接続にはピンポン バッファーを使用し、ストリームへの接続には DMA バッファーが使用される場合があります。 |
| Net | バッファーが関連付けられているネット。 |
| Column | バッファーがマップされるタイルの列位置。 |
| Row | バッファーがマップされるタイルの行位置。 |
| Bank | バッファーがマップされるタイルのバンク。バンクは 0、1、2、または 3 です。 |
| Offset | バンクでのバッファーのアドレス オフセット。 |
| Size | バッファーのサイズ (バイト数)。 |
| Lock ID | バンクに配置された場合のバッファーの ID。 |
| Lock Name | バッファーに関連付けられているロックの固有名。これは、バッファーのロック ストールをデバッグするのに使用できます。 |
ポート
Ports の表には、デザインのすべてのポート (GMIO ポート、PLIO ポート、カーネルの入力、入出力、および出力ポート) が含まれます。
| 列 | 詳細 |
|---|---|
| Name | カーネルの入力、入出力、および出力ポート、GMIO、または PLIO ポートの名前を示します。 |
| ID | AI エンジン コンパイラで指定されるポートの ID。 |
| Type | ポートのタイプを指定します。PLIO ポートにはストリームおよびパケット スイッチング、GMIO ポートにはグローバル メモリ、Function にはメモリまたはストリームが含まれます。 |
| Direction | ポートの方向を指定します。IN、OUT、INOUT のいずれかです。 |
| Data Type | カーネルのポートのデータ型定義。input_window<int16>*、input_stream<int16>* などです。 |
| Buffers | 接続用にインスタンシエートされたバッファーの数を示します。ストリーミング接続では、バッファーは使用されません。ウィンドウ接続では、ピンポン バッファーが使用されます。 |
| Connected Ports | そのポートが接続されているポートの数を示します。ポートは、複数のポートにマルチキャストできます。詳細は、マルチキャスト サポートを参照してください。 |
ネット
Nets の表には、AI エンジン カーネル間のネット接続と、AI エンジン カーネルと PLIO/GMIO ポート間のネット接続の詳細が示されます。次に示す graph.cpp ファイルの抜粋は、グラフの AI エンジン カーネル間または PLIO/GMIO ポートへのストリームおよびウィンドウ接続に使用される接続制約の例を示しています。
connect< window >(in, interpolator.in[0]);
connect< window, stream >(interpolator.out[0], clip_in);
connect< stream >(clip_out, classify.in[0]);
connect< window >(classify.out[0], out);
| 列 | 説明 |
|---|---|
| Name | 内部生成されたネットの名前。 |
| Variable | ネット接続の名前 (接続制約でオプションで指定可能)。<unnamed>.net# は、connect<> にグラフの接続制約の一部として固有の名前が指定されていないことを示します。 |
| Source Graph Node | グラフ接続のソース ノード (AI エンジン カーネル、PLIO、または GMIO ノード)。 |
| Source Port | グラフ接続のソース ポート (AI エンジン カーネル、PLIO、または GMIO ポート)。 |
| Source ID | aiecompiler で指定されるソースポートの ID。 |
| Destination Graph Node | グラフ接続のデスティネーション ノード (AI エンジン カーネル、PLIO、または GMIO ノード)。 |
| Destination Port | グラフ接続のデスティネーション ポート (AI エンジン カーネル、PLIO、または GMIO ポート)。 |
| Destination ID | AI エンジン コンパイラで指定されるデスティネーション ポートの ID。 |
| Latency (Cycles) | ソース ノードからデスティネーション ノードにデータを転送するのに必要な最小サイクル数。 |
| FIFO Depth | ネットに配線リソースを介して割り当てられる FIFO メモリ。DMA FIFO、ストリーム スイッチ ポート、およびストリーム スイッチ FIFO として設定されるバッファーが含まれます。FIFO の深さの単位は 32 ビット ワードです。 |
| FIFO Depth Constraint | デザインに指定されている FIFO の深さ制約を示します。 |
| Buffers | ネット接続に使用されるバッファーの数。 |
| Switch Count | ネット接続が通過するスイッチの数。 |
| Switch FIFOs | ネット接続に使用されるストリーム スイッチ FIFO の数。 |
タイル
Tiles の表には、ADF グラフにカーネルおよびバッファーがマップされているタイルをすべて表示します。たとえばこのデザインでは、5 つのタイルが使用されており、そのうち 2 つのカーネル (Tile [25,0] および Tile [25,4]) にカーネルが含まれ、3 つのカーネル (Tile [24,0]、Tile [24,4]、Tile [25,5]) にはバッファーがマップされています。
| 列 | 説明 |
|---|---|
| Tile | タイルの ID を示します。 |
| Column | タイルの列位置を示します。 |
| Row | タイルの行位置を示します。 |
| Kernels | タイルにマップされているカーネルの数を示します。 |
| Buffers | タイルにマップされているバッファーの数を示します。これには、ネット上のバッファーおよびカーネル内のバッファーが含まれます。 |
AI エンジン コンパイラのガイダンス
AI エンジン コンパイラで AI エンジン デザインのコンパイルが完了すると、デザインが解析され、AI エンジンの規則およびベスト ソフトウェア プラクティスに基づいてデザインを向上するためのガイダンスが表示されます。一部のガイダンスは、AI エンジン コンパイラで自動的に修正できます。ガイダンス ファイルには、すべての項目が重要度、カテゴリとタイル番号、詳細、AI エンジン コンパイラで実行された修正、推奨される解決策がリストされます。
ガイダンス ファイル (guidance.html) は、Work/reports ディレクトリにあります。このガイダンス ファイルを表示するには、ウェブ ブラウザーを使用します。デザインをシミュレータまたはハードウェアで実行する前に、デザイン ガイダンスに従ってデザインをアップデートすることをお勧めします。
次に、Work/reports/guidance.html に含まれる AI エンジン コンパイラで生成されたガイダンスの例を示します。
- 変数は、初期化の前に参照されます。
- グローバル変数は、カーネル インプリメンテーションからローカルで初期化されます。
- データの配列は、128 ビット (16 バイト) で揃えられていません。
__restrict修飾子を使用すると、未定義の動作になります。この未定義の動作は、ハードウェアで実行した場合にのみ発生します。注記: デザインのコンパイル時に AI エンジン コンパイラで適切なガイダンス ファイルを生成できるようにするため、xloptオプションを 1 以上に設定する必要があります。