AI エンジン グラフ アプリケーションのコンパイル

この章では、AI エンジン コンパイラ (aiecompiler) に渡されるすべてのコマンド ライン オプションについて説明します。コンパイラは、データフロー グラフのコード、個々のカーネルのコードを使用し、シミュレータ、エミュレーター、および AI エンジン デバイスなどのさまざまな AI エンジン ターゲット プラットフォームで実行可能なイメージを生成します。AI エンジン コンパイラは、グラフをスタティックにコンパイルし、カーネルを AI エンジンにマップおよび配置します。

ヒント: 特に指定されていない場合は、すべての入力ファイル パスは現在のディレクトリを基準とし、すべての出力ファイル パスは Work ディレクトリを基準とします。

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.aVitis コンパイラの入力として使用されるファイルで、AI エンジン コンパイラを起動したディレクトリに生成されます。出力のタイプと出力ディレクトリの内容は、AI エンジン コンパイラのオプション に説明されているように、--target の指定によります。Vitis コンパイラの詳細は、『Vitis 統合ソフトウェア プラットフォームの資料』 (UG1416) のアプリケーション アクセラレーション開発フローの Vitis コンパイラ コマンド を参照してください。

ヒント: 異なる出力ディレクトリを指定するには、--workdir オプションを使用します。

次の表に、./Work ディレクトリの構造と内容を示します。

表 1. 作業ディレクトリの構造
ディレクトリ/ファイル 説明
./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 エンジン コンパイラのオプション

表 2. 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 の値が使用されます。
表 3. [CDO Options]
オプション名 説明
--enable-ecc-scrubbing 使用されているすべての AI エンジン ECC スクラブをイネーブルにします。このオプションにより、AI エンジン ELF CDO の生成時に ECC スクラブがイネーブルになります。コアごとに 1 つのパフォーマンス カウンターが使用されます。ECC スクラブは、デフォルトでオン (true) になっています。
表 4. コンパイラのデバッグ オプション
オプション名 説明
--kernel-linting グラフとカーネルの間の一貫性チェックを実行します。デフォルトは false です。
--log-level=<int> 詳細ログのレベル (0: ログなし、5: すべてのデバッグ メッセージ) を指定します。デフォルトのレベルは 1 です。
注記: -–verbose を指定した場合のデフォルトのレベルは 5 です。
--verbose AI エンジン コンパイラの出力を詳細出力に設定し、コンパイルのさまざまな段階でコンパイラ メッセージを出力します。これらのデバッグおよびトレース ログは、コンパイル プロセスに関して有用なメッセージを提供します。
表 5. 実行ターゲット オプション
オプション名 説明
--target=<hw|x86sim> AI エンジン コンパイラでは、複数のビルド ターゲットがサポートされます。デフォルトは hw です。
  • hw: ターゲット プラットフォームのハードウェア デバイスで使用する libadf.a を生成します。
  • x86sim: x86 simulator で使用するコードをコンパイルします (x86 論理シミュレータ を参照)。
表 6. ファイル オプション
オプション名 説明
--include=<string> コンパイラのフロンドエンド処理に使用するインクルード パスにディレクトリを追加します。

1 つまたは複数のインクルード ディレクトリを指定します。

--output=<string> 入力データフロー グラフ ファイルに対してフロントエンドで生成する output.json ファイルを指定します。この出力ファイルは、AI エンジン デバイスのマップとコードを生成するため、バックエンドに渡されます。このオプションは、ほかのタイプの入力では無視されます。
--platform=<string>

ハードウェア設計およびその RTL 協調シミュレーションを実行する際に使用可能なハードウェアおよびソフトウェア コンポーネントを定義した Vitis プラットフォーム ファイルへのパスを指定します。

--workdir=<string>

デフォルトでは、コンパイラですべての出力が現在のディレクトリの Work サブディレクトリに生成されます。異なる出力ディレクトリを指定する場合に、このオプションを使用します。

表 7. 一般オプション
オプション名 説明
--help 使用可能な AI エンジン コンパイラ オプションを、ここで示すグループ順に表示します。
--help-list AI エンジン コンパイラ オプションをアルファベット順に表示します。
--version AI エンジン コンパイラのバージョンを表示します。
表 8. その他のオプション
オプション名 説明
--no-init AI エンジン データ メモリのウィンドウ バッファーの初期化を無効にします。このオプションを指定すると、SystemC-RTL 協調シミュレーション フレームワークへのバイナリ イメージの読み込みが高速になります。
ヒント: これは、スタティックに初期化されたルックアップ テーブには影響しません。
--nodot-graph デフォルトでは、AI エンジン コンパイラによりユーザーが指定したグラフおよび AI エンジンへの分割を可視化した .dot および .png ファイルが生成されます。このオプションを指定すると、.dot ファイルは出力されません。
表 9. モジュール特定のオプション
オプション名 説明
--Xchess=<string> AI エンジンのコードのコンパイルに使用される CHESS コンパイラにカーネル特定のオプションを渡すために使用できます。

オプション文字列は <kernel-function>:<optionid>=<value> のように指定します。このオプション文字列は、指定したカーネル関数がマップされている AI エンジンに生成されたソース ファイルのコンパイル中に含められます。

--Xelfgen=<string> コンパイラの ELF 生成段階に追加のコマンド ライン オプションを渡します。現在のところ、この段階では 1 回の make コマンドですべての AI エンジン ELF ファイルが生成されます。

並列コンパイルの数を 4 に制限するには、-Xelfgen="-j4" と指定します。

注記: コンパイル中にログに bad_alloc を含むエラーが表示された場合、または Vitis IDE がクラッシュした場合、ワークステーションのメモリ容量が十分でない可能性があります。マシンで使用可能なメモリ容量を増やす以外に可能な回避策としては、コード生成段階でコンパイラにより使用される並列処理を制限する方法があります。これには、GUI の CodeGen オプション -j1 または -j2 を使用するか、コマンド ラインで -Xelfgen=-j1 または -Xelfgen=-j2 を使用します。
--Xmapper=<string> コンパイラのマップ段階に追加のコマンド ライン オプションを渡します。次に例を示します。
--Xmapper=DisableFloorplanning

これらのオプションは、マップまたは配線段階でデザインが収束しない場合、またはメモリ バンクの競合を削減してパフォーマンスを改善する場合に、指定してみることができます。

オプションのリストと説明は、マップおよび配線オプション を参照してください。

--Xpreproc=<string> すべてのソース コード コンパイル (AIE/PS/PL/x86sim) の PREPROCESSOR 段階に一般オプションを渡します。次に例を示します。
--Xpreproc=-D<var>=<value>
--Xpslinker=<string> PS LINKER 段階に一般オプションを渡します。次に例を示します。
--Xpslinker=-L<libpath> -l<libname>
--Xrouter=<string> ROUTER 段階に一般オプションを渡します。次に例を示します。
-Xrouter=enableSplitAsBroadcast
注記: AI エンジン グラフの次回のコンパイルでは、変更された AI エンジン カーネルのみが再コンパイルされます。変更されていないカーネルは再コンパイルされません。
表 10. 最適化オプション
オプション名 説明
--xlopt=<int> opt レベルに基づいて、カーネル最適化の組み合わせをイネーブルにします。有効な値は 0 ~ 2 で、デフォルトは 1 です。
  • xlopt=1
    • ヒープ サイズの自動計算: カーネル解析を使用して各 AI エンジン のヒープ要件を自動的に計算します。ヒープ サイズを指定する必要はありません。
    • ガイダンス: ガイダンスは、マップで大きなグローバル アレイを割り当て、メモリの競合を最小限に抑えることができるように提供されます。
  • xlopt=2
    • 関数の自動インライン展開: 関数に __inline または inline が使用されていなくても、有益で可能な場合に関数を自動的にインライン展開します。
    • プラグマの挿入: カーネル コードにプラグマを挿入します。--Xxloptstr="-annotate-pragma" および --xlopt=2 を適用してプラグマの挿入をイネーブルにします。
      注記: コンパイラ最適化 (xlopt > 0) により、デバッグの可視化が低減されます。
--Xxloptstr=<string> xlopt レベル 2 で最適化をイネーブル/ディスエーブルにするオプション文字列。
  • -xlinline-threshold=T: 関数の自動インライン展開のしきい値を T に設定します。T のデフォルト値は 5000 です。
  • -annotate-pragma: ループ展開、パイプライン処理、フラット化プラグマを自動的に挿入します。デフォルトは false です。

マップおよび配線オプション

表 11. マップ オプション
オプション 説明
DisableFloorplanning マップの自動フロアプランをディスエーブルにします。このオプションは、多数の制約を設定しており、ロケーション制約を使用してマップを制御する場合に便利です。
BufferOptLevel[1-9] メモリ バンクの競合を削減してスループットを向上します。BufferOptLevel の値を大きくすると、同じメモリ バンクにマップされるバッファー数を削減され、バンクの競合が発生する可能性が下がるので全体的なパフォーマンスに影響します。BufferOptLevels の値を大きくするとマップされる領域の全体的なサイズが増加し、ソリューションを見つけられなくなる可能性があります。デフォルトの BufferOptLevelsBufferOptLevel0 です。
disableSeparateTraceSolve トレース デバッグ機能を使用する際、デフォルトでは AI エンジン のマップ ツールによりすべての PLIO/GMIO が元のデザインの場所に配置されます。ただし、元のソリューションにトレース GMIO を配置するスペースがない場合は、デザイン PLIO を移動しない限りソリューションはありません。その場合にこのオプションを使用できます。
注記: 前回のデザイン配置は、次回のコンパイルで再利用できます。これにより、マップの実行時間が短縮されます。コンパイラを実行すると、Work/temp ディレクトリに配置制約ファイル graph_aie_mapped.aiecst が生成されます。このファイルを将来のコンパイルで使用する場合は、Work フォルダーはコンパイルのたびに再生成されるので、ザイリンクスでは Work/temp/graph_aie_mapped.aiecst を保存することをお勧めします。この制約ファイルは、次回の実行時にコマンド ラインで指定できます。
aiecompiler --constraints Work/temp/graph_aie_mapped.aiecst src/graph.cpp
ヒント: マップ ツールでは、コアごとに 16K プログラムメモリの制限があることは認識されていません。これを回避するには、ランタイム仕様を変更してカーネルを異なるコアにマップするのが 1 つの方法です。
表 12. 配線オプション
オプション 説明
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 ビューに表示されています。

1: Vitis アナライザーに表示されたグラフのサマリ


グラフおよびアレイの詳細

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);
2: [Kernels] の表


表 13. 見出しの説明
説明
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");
3: [PL] の表


表 14. 見出しの説明
説明
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 が表示されます。詳細は、明示的パケット スイッチングを参照してください。

バッファー

Buffers の表には、ADF グラフにマップされているバッファーに関する情報が示されます。バッファーは通常ウィンドウ接続で使用されます。
注記: buf# および buf#d はピンポン バッファーを示します。
4: バッファーの表
表 15. 見出しの説明
説明
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 ポート、カーネルの入力、入出力、および出力ポート) が含まれます。

注記: Vitis アナライザーでは、FileIO は PLIO として表示されます。
5: [Ports] の表
表 16. 見出しの説明
詳細
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);
6: [Nets] の表


表 17. 見出しの説明
説明
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]) にはバッファーがマップされています。

7: [Tiles] の表


表 18. 見出しの説明
説明
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 以上に設定する必要があります。