set_directive_dataflow - 2025.2 日本語 - UG1399

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

Document ID
UG1399
Release Date
2026-01-22
Version
2025.2 日本語

説明

関数またはループにデータフロー最適化を実行し、RTL インプリメンテーションの同時実行性を向上します。

C/C++ 記述では、すべての演算が順次に実行されます。set_directive_allocation などのリソースを制限する指示子を指定しない場合、Vitis HLS でレイテンシを最小限に抑え、同時実行性を向上するよう処理されます。ただし、データ依存性のためにこれが制限されることがあります。たとえば、配列にアクセスする関数またはループは、完了する前に配列への読み出し/書き込みアクセスをすべて終了する必要があります。そのため、そのデータを消費する次の関数またはループの演算を開始できません。

ただし、前の関数またはループがすべての演算を完了する前に、次の関数またはループの演算を開始できるようにすることは可能です。データフロー最適化を指定した場合、HLS ツールで順次関数またはループ間のデータフローが解析され、プロデューサー関数またはループが完了する前にコンシューマー関数またはループの演算を開始できるように、ピンポン RAM または FIFO に基づいてチャネルが作成されます。これにより関数またはループを並列実行でき、レイテンシが削減されて RTL のスループットが向上します。

ヒント: config_dataflow コマンドは、データフロー最適化で使用されるデフォルトのメモリ チャネルと FIFO の深さを指定します。

DATAFLOW 最適化が機能するようにするには、データがデザイン内のタスク間を途切れずに流れる必要があります。また、次のような状況には特に注意が必要です。詳細は、制御駆動型のタスク レベル並列処理の制限 および データフロー領域のコーディング スタイル を参照してください。

  • シングル プロデューサー コンシューマー違反
  • タスク間のフィードバック
  • タスクの条件付き実行
  • 複数の exit 条件を持つループ
重要: これらのコーディング スタイルのいずれかが使用されている場合、HLS ツールでメッセージが表示され、DATAFLOW 最適化は実行されません。

なお、DATAFLOW 最適化は、デフォルトでは階層的には適用されません。サブ関数またはループに DATAFLOW 最適化が有益な可能性のあるタスクが含まれる場合、DATAFLOW 最適化をそのループまたはサブ関数に適用するか、サブ関数をインライン展開する必要があります。

構文

set_directive_dataflow <location> -disable_start_propagation
  • <location>: データフロー最適化を実行する場所を function[/label] の形式で指定します。
  • -disable_start_propagation: 開始トークンを内部プロセスに伝搬する開始 FIFO の作成をディスエーブルにします。このような FIFO がパフォーマンスのボトルネックとなることがあります。

次の例では、関数 foo 内にデータフロー最適化を指定しています。

set_directive_dataflow foo