データフロー最適化は、カーネル内でタスク レベルのパイプラインおよび並列処理をイネーブルにすることにより、カーネルのパフォーマンスを改善する優れた手法です。v++
コンパイラで複数のカーネル関数が同時実行されるようスケジューリングできるようになるので、スループットが上がり、レイテンシが短縮されます。これは、タスク レベルの並列処理とも呼ばれます。
次の図に、データフロー パイプライン処理の概念を示します。デフォルトでは、func_A
、func_B
、func_C
の順に実行されて終了します。
pragma HLS dataflow
をイネーブルにすると、データが使用可能になったらすぐに各関数が実行されるようスケジューリングできます。この例の場合、元の top
関数のレイテンシと間隔は 8 クロック サイクルです。データフロー最適化を使用すると、間隔は 3 クロック サイクルに削減されます。
図 1. データフロー最適化