ストリーム ベース アクセス - 2023.2 日本語

AI エンジン カーネルおよびグラフ プログラミング ガイド (UG1079)

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

ストリーム ベースのアクセス モデルでは、カーネルは型付きデータの入力ストリームまたは出力ストリームを引数として受け取ります。これらのストリームへの各アクセスは同期されます。すなわち、ストリーム内でデータが利用可能でない場合は読み出しはストールし、ストリームが新しいデータを受け入れることができない場合は書き込みはストールします。

AI エンジンは、id=0 または 1 の 2 つの 32 ビット入力ストリーム ポートをサポートし、id=0 または 1 の 2 つの 32 ビット出力ストリーム ポートをサポートします。この ID はストリーム オブジェクト コンストラクターに引数として与えられます。AI エンジン コンパイラは、入力および出力ストリーム ポートの ID をカーネルの引数リスト内で左から右に自動的に割り当てます。パケット交換ストリームの場合を除いて、同じ AI エンジンにマップされる複数のカーネルがストリーム ポートを共有することはできません (明示的パケット スイッチング 参照)。
public:
  input_plio din;
  output_plio dout;
  adf::kernel k0,k1;
...
connect <stream> (din.out[0], k1.in[0]);
connect <stream> (k1.out[0], k2.in[0]);
connect <stream> (k2.out[0], dout.in[0]);
1 つの AI エンジンのアキュムレータ レジスタと物理的に隣接するコアの間には、カスケードと呼ばれる直接ストリーム通信チャネルがあります。カスケード ストリームは、AI エンジン アレイ内で AI エンジン プロセッサからプロセッサへ蛇行して接続されます。
connect <cascade> (k1.out[1], k2.in[1]);

ストリーム データ構造は、AI エンジン コンパイラによってデータフロー グラフの接続から自動的に推論され、グラフ制御を実装するラッパー コード内で自動的に宣言されます。カーネル関数は、カーネル関数に引数として渡されるストリーム データ構造を指すポインターを処理します。データフロー グラフまたはカーネル プログラム内でこれらのストリーム データ構造を宣言する必要はありません。

マルチレート処理のストリーム接続

ストリームやパケット ストリーム接続の場合、ユーザー指定がなければマルチレート解析は容易な作業ではありません。次のように、制約を使用して、カーネルが入力ストリームまたは pktstream 入力から読み出すサンプル数、およびカーネルがストリームまたは pktstream 出力に書き込むサンプル数を指定します。
// constraint to specify samples per iteration for stream/pktstream ports to support multirate connections
constraint<uint32_t> samples_per_iteration(adf::port<adf::input>& p);
constraint<uint32_t> samples_per_iteration(adf::port<adf::output>& p);
constraint キーワードにはテンプレート値としてサンプルのデータ型が必要で、関数 samples_per_iteration がカーネルの入力または出力に適用されます。関連するストリームは、バッファーの別のストリームに接続できます。
注記: マルチレート解析に問題がなかった場合、adf::samples_per_iteration (>0) が指定されたストリーム/pktstream ポートについてのみレートが計算されます。