ここまでで、カーネルのスループット目標を達成するためにデータ モーションと処理関数を使用したデータフロー構造を作成しました。次に、目標のスループットを達成するように各処理関数をインプリメントします。
前述のように、関数のスループットは、処理されるデータ量を関数のレイテンシまたは実行時間で除算して算出します。
この設計手法で説明する「アウトサイドイン」分割プロセスのこの段階では、目標のスループットも、関数で消費および生成されるデータ量もわかっているので、簡単に各関数のレイテンシ ターゲットを算出できます。
Vitis HLS コンパイラでは、関数およびループのスループットとレイテンシに関する詳細なレポートが生成されます。ターゲット レイテンシが決定されたら、HLS レポート に説明されているように、HLS レポートからどの関数およびループがレイテンシ ターゲットを満たしていないか、どれに注意が必要かを特定します。
ループのレイテンシは、次のように算出できます。
説明:
- Steps
- 1 回のループ反復にかかる時間 (クロック サイクル数)。
- TripCount
- ループ内の反復回数。
- II
- 開始間隔 (2 つの連続する反復間のクロック サイクル数)。ループがパイプライン処理されない場合、II は Steps と同じになります。
クロック周期が一定だとすると、ループのレイテンシを削減し、その結果の関数のスループットを改善するには、次の 2 つの方法があります。
- ループ内の Steps を削減する (1 つの反復の実行にかかる時間を削減)。
- TripCount を減らして、ループの反復回数を減す。
- II (開始間隔) を削減して、開始できるループ反復の回数を増やす。
TripCount が Steps よりもかなり大きい場合、II または TripCount のいずれかを 1/2 にすると、ループのスループットを倍にできます。
レイテンシがターゲットを超えているループを最適化するには、この情報を理解しておくことが重要です。Vitis HLS コンパイラでは、デフォルトでは II できるだけ小さくなるようにループ インプリメンテーションを生成することが試みられます。まず、トリップカウントまたはステップ数を減らしてレイテンシを改善する方法から試してください。詳細は、ループ を参照してください。