AI エンジン コンパイラのオプション - 2023.2 日本語

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

Document ID
UG1076
Release Date
2023-12-04
Version
2023.2 日本語
表 1. 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 クロック乗せ換え (境界ロジック インターフェイス (BLI) レジスタ) の周波数を MHz で指定します。ハードウェアの AI プログラマブル ロジック (PL) インターフェイスの間に BLI フリップフロップがあり、これをタイミングを向上するために使用できます。タイミングがクリティカルなデザインでは、BLI レジスタをイネーブルにすると、最も高いクロック周波数を達成するのに役立ちます。このオプションを使用して、AI エンジン - PL チャネル全体で BLI レジスタの推論を制御します。PL 周波数が PL レジスタのしきい値よりも大きい場合、BLI レジスタが AI エンジン-PL インターフェイスに挿入されます。

しきい値のデフォルト周波数は、AI エンジンの周波数 (デバイスのスピード グレードによる) の 1/8 です。

注記: AI エンジン アレイの周波数の 1/4 を超える PL レジスタのしきい値は無視され、AI エンジン アレイの周波数の 1/4 の値が代わりに使用されます。
表 2. CDO オプション
オプション名 説明
--broadcast-enable-core ブロードキャストを使用するグラフに関連付けられているすべての AI エンジンを有効にします。このオプションは、コアをイネーブルにするために配列の 1 つのブロードキャスト チャネルを予約します。デフォルトは true です。
表 3. コンパイラ デバッグ オプション
オプション名 説明
--adf-api-log-level=<value> ADF API ログ レベル。指定可能な値は次のとおりです。
  • 0: エラー
  • 1: レベル 0 + 警告
  • 2: レベル 1 + 情報メッセージ
  • 3: レベル 2 + デバッグ メッセージ

デフォルトは 2 です。

--kernel-linting グラフとカーネルの間の一貫性チェックを実行します。デフォルトは false です。
--quiet AI エンジン コンパイラの出力を抑制します。
--verbose AI エンジン コンパイラの出力を詳細出力に設定し、コンパイルのさまざまな段階でコンパイラ メッセージを出力します。これらのデバッグおよびトレース ログは、コンパイル プロセスに関して有用なメッセージを提供します。
表 4. デザイン ルール チェックのオプション
オプション名 説明
--drc.disable=<string> 指定した ID のデザイン ルール チェックをディスエーブルにします。ディスエーブルにされたチェックは実行されません。
--drc.enable=<string> 指定した ID のデザイン ルール チェックをイネーブルにします。
--drc.severity=<string> format <ID>:<severity>[:context] でデザイン ルール チェックの重要度を変更します。
--drc.waive=<string> 指定した ID のデザイン ルール チェックを放棄します。放棄されたチェックは引き続き実行されますが、放棄されたことが示されます。
表 5. 実行ターゲット オプション
オプション名 説明
--target=<hw|x86sim> AI エンジン コンパイラでは、複数のビルド ターゲットがサポートされます。デフォルトは hw です。
  • hw: ターゲット プラットフォームおよびハードウェア エミュレーションのハードウェア デバイスで使用する libadf.a を生成します。
  • x86sim: x86 simulator で使用するコードをコンパイルします (x86 論理シミュレータ を参照)。
表 6. ファイル オプション
オプション名 説明
--include=<string> コンパイラのフロンドエンド処理に使用するインクルード パスにディレクトリを追加します。

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

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

Vitis プラットフォーム ファイルへのパスを指定します。このファイルが、Vitis アプリケーション開発の開始点となります。これらのアプリケーションは、プラットフォームで提供されるリソースや機能を利用できます。プラットフォームによって、アプリケーションで利用できるハードウェアとソフトウェアのコンポーネントが定義されます。プラットフォームは、ザイリンクス プラットフォーム ファイル (XPFM) またはザイリンクス シェル アーカイブ (XSA) として指定できます。

--part=<string> パーツ ファミリまたはパーツの値を指定します。


例: aiecompiler --include ./aie --part xcvc1902-vsvd1760-2MP-e-S graph.cpp

AI エンジン コンパイルを実行するために、aiecompiler では --platform オプションまたは --part オプションを指定する必要があります。--platform および --part オプションを同時に指定することはできません。

--workdir=<string>

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

表 7. 一般オプション
オプション名 説明
--help 使用可能な AI エンジン コンパイラ オプションを、ここで示すグループ順に表示します。
--help-list AI エンジン コンパイラ オプションをアルファベット順に表示します。
--version AI エンジン コンパイラのバージョンを表示します。
表 8. その他のオプション
オプション名 説明
--disable-multirate ADF グラフでマルチレートをオフにします。デフォルトは false です。
--evaluate-fifo-depth このオプションは AI エンジン でのみ使用可能で、再変換データパスを解析します。データは複数のパスで送信されることがあり、それらが再収束することでデッドロックが発生することがあります。このようなデッドロックは、適切なデータパスに FIFO を追加することで解決できます。

データパスの再変換の結果生じるデッドロックを評価し、解決する手順は、次のとおりです。

  1. このオプションを使用してデザインをコンパイルします。
  2. デザインで aiesimulator を実行します。
  3. Vitis 統合 IDE でシミュレーションの run_summary を開きます。[Estimated FIFO] の列を参照し、fifo_depth 制約を使用して推奨される数の FIFO を特定のネットに適用します。
注記: この機能は AI エンジン ML デザインでは利用できません。

詳細は、デッドロックの解消を目的とした FIFO 深さの評価を参照してください。

--no-init AI エンジン データ メモリのウィンドウ バッファーの初期化を無効にします。このオプションを指定すると、SystemC-RTL 協調シミュレーション フレームワークへのバイナリ イメージの読み込みが高速になります。デフォルトは false です。
ヒント: これは、スタティックに初期化されたルックアップ テーブには影響しません。
--nodot-graph デフォルトでは、AI エンジン コンパイラによりユーザーが指定したグラフおよび AI エンジンへの分割を可視化した .dot および .png ファイルが生成されます。このオプションを指定すると、.dot ファイルは出力されません。デフォルトは false です。
--lock-fence-mode=<int> AIE ML デザインの I/O バッファーの取得および解放のスケジューリングを次のように制御します。
  • 0: I/O バッファーの取得と解放に関して、控えめなスケジューリングを使用します。
  • 1 (デフォルト): I/O バッファーの取得と解放に関して、積極的なスケジューリングを使用します。これにより、サイクル数が削減されることがあります。
表 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=dmaFIFOsInFreeBankOnly
--Xx86sim=<string> コンパイラに x86sim 固有のオプションを渡します。次に例を示します。
-Xx86sim=clangStaticAnalyzer

カーネル ソース コードの clang スタティック アナライザーをイネーブルにします。

--fast-floats add、sub、mul、compare などの線形浮動小数点スカラー演算の高速インプリメンテーションをイネーブルにします。
--fast-nonlinearfloats sine/cosine、sqrt、inv などの非線形浮動小数点スカラー演算の高速インプリメンテーションをイネーブルにします。
--fastmath float2fix、fplt、および fpge の高速インプリメンテーションをイネーブルにします。
--float-accuracy arg AI エンジン ML の浮動小数点演算精度を選択します。
  • safe: 精度は FP32 より若干高い。
  • fast: FP32 と同等の精度でパフォーマンスは向上。
  • low: FP16 および bfloat16 よりも精度が高く、最高のパフォーマンス。
注記: AI エンジン グラフの次回のコンパイルでは、変更された AI エンジン カーネルのみが再コンパイルされます。変更されていないカーネルは再コンパイルされません。
表 10. イベント トレースのオプション
オプション名 説明
--event-trace=<value>

<value> には、次のいずれかを指定します。

  • functions
  • functions_partial_stalls
  • functions_all_stalls
  • runtime
イベント トレース設定値。<value> は次を示します。
  • ストールなしの関数遷移ビュー。
  • ストリーム、ロック、カスケード ストールを含む関数遷移ビュー。
  • すべてのストール (ストリーム、ロック、カスケード、メモリ) を含む関数遷移ビュー。
  • AI エンジン メモリとインターフェイス タイルのランタイム イベント トレースの設定。
--event-trace-port=<value>
  • plio
  • gmio
AI エンジン イベント トレース ポートを設定します。デフォルトは gmio ですが、AMD ではイベント トレース ポート設定としては gmio を使用することをお勧めします。詳細は、イベント トレースのビルド フロー を参照してください。
  • AI エンジン イベント トレース ポートを plio に設定します。
  • AI エンジン イベント トレース ポートを gmio に設定します。
--num-trace-streams=<int> トレース ストリームの数。デフォルトは 16 です。
--trace-plio-width=<int> トレース ストリームの PLIO 幅。デフォルト値は 64 です。有効な値は 32 および 64 です。
--graph-iterator-event グラフの反復がインクリメントされるたびに、ユーザー event0() を生成します。これにより、グラフの反復に基づいてハードウェア イベント トレースの開始を遅らせることができます。
表 11. 最適化オプション
オプション名 説明
--xlopt=<int> opt に基づいてカーネル最適化の組み合わせをイネーブルにします。有効な値は 0 ~ 2 で、デフォルトは 1 です。
  • xlopt=1
    • ヒープ サイズの自動計算: カーネル解析を使用して各 AI エンジン のヒープ要件を自動的に計算します。ヒープ サイズを指定する必要はありません。
    • ガイダンス: アライメントされていない変数、マップで割り当てられる可能性のあるグローバル配列、制限の不適切な使用、書き込み前に読み出し競合の可能性に対して、ガイダンスが表示されます。
    • プラグマの挿入: カーネル コードに自動的にプラグマを推論し、挿入します。
  • xlopt=2
    • 関数の自動インライン展開: 関数が __inline または inline として宣言されていなくても、有益で可能な場合に関数を自動的にインライン展開します。
    • 展開されたループのループ ピーリング: ピーリングによりループ反復回数を展開係数の倍数にします。反復回数と収益性の経験則に基づいてループを複数のループに分割し、分割ループにフラット化プラグマを追加します。
注記: コンパイラ最適化 (xlopt > 0) により、デバッグの可視化が低減されます。
--Xxloptstr=<string> xlopt レベル 1 および 2 で最適化をイネーブル/ディスエーブルにするオプション文字列。
  • -annotate-pragma=false: ループ プラグマを自動的に挿入しないようにします。
  • -xlinline-threshold=T: 関数の自動インライン展開のしきい値を T に設定します。T のデフォルト値は 5000 です。
  • -annotate-pragma: ループ展開、パイプライン処理、フラット化プラグマを自動的に挿入します。デフォルトは true です。
--lock-fence-mode
注記: このオプションは、AIE ML デバイスにのみ使用できます。

I/O バッファーの取得と解放について、積極的なスケジューリングをイネーブルにします (デフォルト: 0)。

  • --lock-fence-mode=0: 積極的なスケジューリングをディスエーブルにします。
  • --lock-fence-mode=1: マルチレイヤー デザイン以外に積極的なスケジューリングを使用します。
--runtime-opt このオプションをイネーブルにすると、機能的に同じコアを特定し、それらを一度だけコンパイルすることで、全体的なコンパイル時間が短縮されます。
  • --runtime-opt=false: 最適化は実行されません。これがデフォルトです。
  • --runtime-opt=true: 最適化をイネーブルにします。
注記: 2 つの予約語 aie および adf は、グラフ プログラミングでは有効な名前空間識別子ではありません。
注記: AI エンジン グラフやカーネル コードで定義される関数名に、標準的な C++ ライブラリの関数名と同じものは使用できません。このような関数が使用されると、定義済みの関数名との競合が生じるため、aiecompiler でエラー メッセージが表示されることがあります。