関数のインライン展開 - 2021.1 Japanese

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2022-03-29
Version
2021.1 Japanese

C コードは通常、複数の関数で構成されます。デフォルトでは、各関数が Vitis コンパイラにより個別にコンパイルおよび最適化されます。関数本体に対して固有のハードウェア モジュールが生成され、必要に応じて再利用されます。

パフォーマンスの面から、一般的には関数をインライン展開するか、関数の階層を解除する方が良い結果が得られます。このようにすると、Vitis コンパイラで関数の境界を越えてグローバルに最適化を実行できるようになります。たとえば、パイプライン処理されたループ内で関数を呼び出す場合、関数をインライン展開するとコンパイラでより積極的に最適化を実行できるようになり、ループのパイプライン パフォーマンスが向上します (開始間隔 (II) を削減)。

次の INLINE プラグマを関数本体に配置すると、関数がインライン展開されます。
foo_sub (p, q) {
  #pragma HLS INLINE
  ....
  ...
}

ただし、関数本体が非常に大きく、メインのカーネル関数で複数回呼び出される場合は、関数をインライン展開すると、使用されるリソース量が多くなりすぎて容量の問題が発生することがあります。このような場合は関数をインライン展開せずに、v++ コンパイラで関数がそのローカル コンテキスト内で個別に最適化されるようにします。