AMD Versal™
アダプティブ SoC AI エンジン マルチスレッド シミュレータ (aiesimulator
) には、AI エンジン アレイに加え、グローバル メモリ (DDR メモリ) およびネットワーク オン チップ (NoC) のモデリングが含まれています。シミュレーション ターゲットを使用してアプリケーションをコンパイルすると、AI エンジン マルチスレッド シミュレータを次のように起動できます。
aiesimulator –-pkg-dir=./Work
これにより、シミュレータがマルチスレッド モードで実行されます。使用するスレッド数は、マシンで使用可能なコア数で決まります。デフォルトのスレッド数を設定するための計算は、マシンで利用可能なコアと AI エンジン デザインで使用されるコア タイルの数によって異なります。
使用するスレッド数を手動で設定することもできます。マシンで使用可能なスレッドの総数を算出するには、マシンで使用可能なコア数に各コアでサポートされるスレッド数を掛けます。
- マシンで使用可能な総スレッド数 = マシンのコア数 * 各コアあたりのスレッド数
MTMAXTHREADS=<n>
オプション (n
はスレッドの数) を設定します。aiesimulator --pkg-dir=./Work -f <sim_opts.txt>
MTMAXTHREADS=<n>
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 回押します。--simulation-cycle-timeout
オプションを使用してシミュレータを停止するサイクルを指定します。これにより、プロファイル レポートに表示される各実行の合計サイクル数が同じになります。printfs
をイネーブルにするためにカーネル コードに <iostream>
を含めないでください。カーネル コードで #include
<iostream>
を使用すると、x86 シミュレータおよび aiesimulator
シミュレータの両方でコンパイル エラーが発生します。グラフとサブグラフ シミュレーションの実行時間
小規模サブグラフから成る大規模グラフで構成された AI エンジン デザインでは、まず各サブグラフをシミュレーションすることをお勧めします。サブグラフにおいて機能やパフォーマンスの面で要件が満たされたことが検証された後、より大規模なグラフのシミュレーションを実行できます。一般的に、サブグラフのサイズに応じて大規模グラフのシミュレーション時間が長くなる場合があります。