stable 配列 - 2023.2 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

stable プラグマを使用すると、データフロー領域の入力または出力変数をマークして、それらの該当するタスク レベルの同期を削除できます (ユーザーがこの削除を本当に正しいと確認した場合のみ)。

void dataflow_region(int A[...], ...
#pragma HLS stable variable=A
#pragma HLS dataflow
    proc1(...);
    proc2(A, ...);

stable プラグマがなく、Aproc2 で読み出される場合、proc2 は、それが含まれるデータフロー領域で初期同期の一部になります。つまり、proc1proc2 も再開可能な状態になるまでは再開されないので、データフロー反復が重複されなくなり、パフォーマンスが落ちてしまうことがあります。stable プラグマは、この同期が必ずしも正確性を保持するわけではないことを示しています。

stable プラグマがある場合、コンパイラは次のような判断をします。

  • Aproc2 で読み出される場合、読み出されるメモリ位置は依然としてアクセス可能で、dataflow_region の実行中に、ほかのプロセスや呼び出したコンテキストで上書きされません。
  • Aproc2 で書き込まれる場合、書き込まれたメモリ位置は dataflow_region の実行中に、それらの定義前にほかのプロセスや呼び出したコンテキストによって読み出されません。

これは、データフロー領域がまだ開始していない場合や実行を終了していない場合にのみ、呼び出し元がこれらの変数をアップデートまたは読み出す場合によく使用されます。

つまり、データフロー最適化は、デザインのスループットを大幅に向上させることができる優れた最適化手法です。デザインで利用可能な並列処理の推論は HLS ツールに依存するため、設計者は、HLS ツールで容易に推論が実行されるようにコードを記述する必要があります。場合によっては、データフロー モデルとタスクチャネル モデルの両方を同じデザインで運用する必要があることもあります。次のセクションでは、このような混合モデルで構築可能なデザインについて説明します。