合成ランタイムおよび容量の改善 - 2023.2 日本語

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

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

HLS コンパイラはオブジェクトをスケジュールします。オブジェクトが浮動小数点の乗算または単一のレジスタであっても、スケジューリングされるのはまだオブジェクトです。浮動小数点の乗算は終了に複数サイクルかかる可能性があり、インプリメントに多くのリソースが使用されますが、スケジューリングのレベルでは 1 つのオブジェクトとして扱われます。

HLS コンパイラでは、演算が階層別にスケジューリングされます。ループ内の演算がスケジューリングされてから、ループ、サブ関数、関数内の演算がスケジューリングされます。コンパイラの実行時間は、次の場合に増加します。

  • スケジューリングするオブジェクトが多い。
  • 自由度および可能性が多くて確認に時間がかかる。

ループの展開および配列の分割により、スケジューリングするオブジェクト数が増えるので、ランタイムが増加する可能性は高くなります。関数のインライン展開でもこの階層レベルでスケジューリングするオブジェクト数が増えるので、ランタイムが増加します。単純にすべての配列を分割し、すべてのループを展開し、すべての関数をインライン処理する場合、十分注意してください。パフォーマンス目標を達成するには、これらの最適化が必要になることもありますが、合成実行時間は増加する可能性があります。HLS プログラマ ガイド で説明する最適化ストラテジを注意して適用してください。

ループを展開する必要がある場合、または上位階層で PIPELINE 指示子が使用されて自動的にループが展開される場合は、ループ ボディを別の関数として取り込んでみてください。これにより、ループが展開されたときにロジックのコピーが複数作成されるのではなく、すべてのロジックが 1 つの関数に含まれるようになります。定義された階層のオブジェクトの 1 セットは早めにスケジューリングされるようになります。展開されたループがパイプライン領域で使用される場合は、この関数をパイプライン処理するようにしてください。

コードの自由度もランタイムに影響することがあります。HLS コンパイラは、スループットが最も高く、レイテンシは最も低く、エリアは最小のデザインを見つけるタスクをデフォルトで与えられた上級設計者のようなものです。HLS の制約が増えると、探すオプションが少なくなるので、実行速度も速くなります。コード内のスコープ (ループ、関数または領域) に対してレイテンシ制約を使用することを考慮してください。LATENCY 指示子を同じ最小値および最大値で設定すると、そのスコープ内で可能性のある最適化の検索が減少します。