データ アクセスのメカニズム - 2022.1 日本語

Vitis Model Composer ユーザー ガイド (UG1483)

Document ID
UG1483
Release Date
2022-05-26
Version
2022.1 日本語

AI エンジン カーネルは、データ ブロックを消費または生成するか、あるいはデータ ストリームをサンプル単位でアクセスまたは生成できます。このセクションでは、両方の場合のデータ アクセス API について説明します。

ウィンドウ ベース アクセス

カーネルに入力されるデータのブロックは、入力ウィンドウと呼ばれます。入力ウィンドウは、そのウィンドウに含まれるデータ型によって定義されます。次に、実数部と虚数部が両方とも 16 ビット幅の複素整数を含む入力ウィンドウを宣言する例を示します。

input_window_cint16 myInputWindow;

カーネルから出力されるデータのブロックは、出力ウィンドウと呼ばれます。これも同様に、データ型で定義されます。次に、32 のビットの整数を含む出力ウィンドウを宣言する例を示します。

output_window_int32 myOutputWindow;

カーネルは、入力ウィンドウからデータを読み出し、出力ウィンドウにデータを書き込みます。デフォルトでは、データの入力ウィンドウを待機するのに必要な同期または空の出力ウィンドウを準備するのに必要な同期は、カーネルに入る前に実行されます。カーネル内では、データの個々の要素を読み出すためまたは書き込むために同期は必要はありません。つまり、ウィンドウがフルでなければカーネルは実行されません。

場合によっては、カーネルの各呼び出しでウィンドウのフル データを消費しない場合、または各呼び出しでウィンドウのフル データを生成しない場合は、カーネルの [Block Parameters] ダイアログ ボックスでカーネル ポートを async に設定することにより、バッファーの同期を制御できます。

1 つのブロックの入力から次のブロックにオーバーラップさせることも可能です。これは通常、フィルターなどの特定のアルゴリズムで必要です。このオーバーラップは、ウィンドウ マージンと呼ばれます。ウィンドウ マージンを指定すると、カーネルは window_size + margin_size のサンプル数にアクセスできます。

ウィンドウ マージンの動作を、次の例を使用して説明します。

図 1. シミュレーション

入力はサイズ 8 のベクターで、これがウィンドウ サイズ 6 でウィンドウ マージン 2 のカーネル ブロックに供給されます。このカーネルは、各呼び出しで合計 8 個のサンプルにアクセスする必要があります。最初のシミュレーション サイクルでは、入力データの最初の 6 個の値の前に 2 つの 0 が追加されます。その後のシミュレーション サイクルでは、カーネルは 6 個の新しい値と前のサイクルからの 2 個の値を含む 8 個の値を受信します。

ストリーム ベース アクセス

カーネルは、データ アクセス API を使用して、データ ストリームにサンプルごとにアクセスできます。ストリーム ベース アクセス モデルでは、カーネルはデータの入力ストリームまたは出力ストリームを引数として受信します。これらのストリームへの各アクセスは同期化されるので、ストリームにデータがない場合は読み出しがストールし、ストリームが新しいデータを受け入れることができない場合は書き込みがストールします。1 つの AI エンジン と物理的に隣接する AI エンジン の間には、カスケードと呼ばれる直接ストリーム接続があります。

次に、cint16 型の入力ストリームと出力ストリームを宣言する例を示します。

input_stream_cint16 * myInputStream;
output_stream_cint16 * myOutputStream;