AI エンジン シミュレータ - 2023.2 日本語

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

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

AMD Versal™ アダプティブ SoC AI エンジン マルチスレッド シミュレータ (aiesimulator) には、AI エンジン アレイに加え、グローバル メモリ (DDR メモリ) およびネットワーク オン チップ (NoC) のモデリングが含まれています。シミュレーション ターゲットを使用してアプリケーションをコンパイルすると、AI エンジン マルチスレッド シミュレータを次のように起動できます。

aiesimulator –-pkg-dir=./Work

これにより、シミュレータがマルチスレッド モードで実行されます。使用するスレッド数は、マシンで使用可能なコア数で決まります。デフォルトのスレッド数を設定するための計算は、マシンで利用可能なコアと AI エンジン デザインで使用されるコア タイルの数によって異なります。

使用するスレッド数を手動で設定することもできます。マシンで使用可能なスレッドの総数を算出するには、マシンで使用可能なコア数に各コアでサポートされるスレッド数を掛けます。

  • マシンで使用可能な総スレッド数 = マシンのコア数 * 各コアあたりのスレッド数
マシンで十分な数のコアがサポートされておらず、限られた数のスレッドでシミュレーションを実行する場合は、使用するスレッドの数を手動で設定できます。この場合、sim_opts.txt ファイルの MTMAXTHREADS=<n> オプション (n はスレッドの数) を設定します。
aiesimulator --pkg-dir=./Work -f <sim_opts.txt>
sim_opts.txt には次が含まれます。
MTMAXTHREADS=<n>
注記: AMD では、利用可能なスレッドをすべてシミュレーションに割り当てないことを強く推奨します。

AI エンジン コンパイラにより、さまざまなコンフィギュレーション ファイルとバイナリ ファイルが --pkg-dir オプションを使用して指定した Work ディレクトリ (AI エンジン グラフ アプリケーションのコンパイル を参照) に生成されます。グラフは、main アプリケーションで指定される制御スレッドによって初期化、実行、および終了されます。AI エンジン コンパイラは、PS IP ラッパーが直接シミュレータに読み込まれるように制御スレッドをコンパイルします。

デフォルトでは、graph.run() オプションによりグラフが無限に実行されるよう指定されます。AI エンジン コンパイラでは、データフロー グラフを無限の While ループで実行するコードが生成されるため、シミュレーションも無限に実行されます。デバッグ用に終了するプログラムを作成するには、グラフ コードで graph.run(<number_of_iterations>) を使用して反復回数を指定します。反復回数は、正の整数で指定します。

注記: graph::run(-1) は、永続的に実行されるグラフを指定します。

AI エンジン シミュレータ コマンドは、まずコンパイラで生成された Work/config/scsim_config.json ファイルで指定されているようにシミュレータを設定します。これには、PL IP ブロックとその接続の読み込み、I/O データ ファイル ドライバーの設定、および NoC とグローバル メモリ (DDR メモリ) 接続の設定が含まれます。その後、指定の PS アプリケーションを実行し、シミュレータを終了します。

AI エンジン シミュレータには、カーネル コードの printfs をイネーブルにしてコンソールに表示されるようにし、プロファイル情報を生成する --profile オプションがあります。また、--dump-vcd <filename> オプションを使用すると、シミュレーション中に VCD (Value Change Dump) が生成されます。指定のクロック サイクル数後にシミュレーションを終了するには、--simulation-cycle-timeout <number-of-cycles> を使用できます。

重要: graph.run() オプションでクロック サイクル数または実行回数のいずれかを指定しない限り、シミュレーションが終わることはありません。シミュレーションを終了するには、Ctrl+c キーを 2 回押します。
ヒント: 同じデザインでシミュレーション実行間のサイクル数に違いがある場合があります。これは、シミュレータがすべての未処理のトランザクション (DMA など) が完了するのを数秒待つからです。この待機時間中、シミュレータ プロセスの時間は経過しますが、OS によりコンテキスト スイッチが実行され、各実行の合計サイクル数が異なるものになることがあります。各実行の合計サイクル数が同じになるようにするには、AI エンジン シミュレータの --simulation-cycle-timeout オプションを使用してシミュレータを停止するサイクルを指定します。これにより、プロファイル レポートに表示される各実行の合計サイクル数が同じになります。
注記: printfs をイネーブルにするためにカーネル コードに <iostream> を含めないでください。カーネル コードで #include <iostream> を使用すると、x86 シミュレータおよび aiesimulator シミュレータの両方でコンパイル エラーが発生します。

グラフとサブグラフ シミュレーションの実行時間

小規模サブグラフから成る大規模グラフで構成された AI エンジン デザインでは、まず各サブグラフをシミュレーションすることをお勧めします。サブグラフにおいて機能やパフォーマンスの面で要件が満たされたことが検証された後、より大規模なグラフのシミュレーションを実行できます。一般的に、サブグラフのサイズに応じて大規模グラフのシミュレーション時間が長くなる場合があります。