ストリーム FIFO の深さ仕様 - 2021.2 日本語

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

Document ID
UG1483
Release Date
2021-10-22
Version
2021.2 日本語

AI エンジン アーキテクチャでは、2 つの AI エンジン間の通信、AI エンジンとプログラマブル ロジック (PL) 間の通信にストリーミング データが広く使用されます。これにより、データフロー グラフに再収束するストリーム パスがある場合に、リソース デッドロックが発生する可能性があります。1 つのパスのパイプラン段数がほかのパスよりも多い場合、プロデューサー カーネルがストールし、バック プレッシャーのため短いパスにデータをプッシュできない可能性があります。それと同時に、コンシューマー カーネルは、データが不足しているため、長いパスのデータの受信を待ちます。2 つのストリーム パス間でデータの生成と消費の順序が異なる場合、2 つのカーネルが 2 つのストリーム パスで直接接続されていても、デッドロックが発生する可能性があります。

Model Composer では、2 つの AI エンジン カーネル間または AI エンジンとプログラマブル ロジック (PL) 間に AIE Signal Spec ブロックを使用して FIFO_DEPTH を追加することがサポートされ、接続に fifo_depth 制約を含むグラフ コードが自動的に生成されます。

図 1. AIE Signal Spec ブロック

AIE Signal Spec ブロックは、AI エンジン と PL カーネルを接続する信号のプロパティを指定します。AIE Signal Spec ブロックをダブルクリックすると、[Block Parameters] ダイアログ ボックスに [Connection] タブと [Platform I/O] タブがあります。

図 2. AIE Signal Spec ブロックの [Block Parameters] ダイアログ ボックス
[Connection]
FIFO の深さを指定します。
[Platform I/O]
プラットフォーム I/O プロパティを指定します。詳細は、PLIO 属性 を参照してください。

次の図に示す例では、AI エンジン カーネル ブロック間の 2 つのストリーム パスが AIE Signal Spec ブロックで接続されています。

図 3. 2 つのストリーム パス上の AIE Signal Spec ブロック

FIFO の深さはデフォルトでは 0 に指定され、対応する情報がブロック シンボルに反映されます。たとえば、2 つの AIE Signal Spec ブロックのパラメーターとして 2 および 4 が指定されている場合、ブロック シンボルは次の図に示すようになります。

図 4. AIE Signal Spec1
図 5. AIE Signal Spec2
図 6. アップデートされたブロック シンボル

AIE Signal Spec ブロックを使用して指定されたストリーム FIFO の値は、次のコードに示すように、生成されたグラフ コード (graph.h) に fifo_depth 制約として含まれます。

graph.h の抜粋:

// create nets to specify connections
      adf::connect< adf::stream > net0 (In1, AIE_Kernel.in[0]);
      adf::connect< adf::stream > net1 (AIE_Kernel.out[0], AIE_Kernel1.in[0]);
      adf::fifo_depth(net1) = 2;
      adf::connect< adf::stream > net2 (AIE_Kernel.out[1], AIE_Kernel1.in[1]);
      adf::fifo_depth(net2) = 4;
      adf::connect< adf::stream > net3 (AIE_Kernel1.out[0], Out1);

2 つの fifo_depth 制約がデザインの 2 つのストリーム パスに対応しています。接続にこの制約 fifo_depth を使用すると、バック プレッシャーのあるパスでバッファリングが増加するため、デッドロックが回避されます。

重要: AIE Signal Spec ブロックは、AI エンジン サブシステムでのみ使用可能です。