syn.directive.loop_flatten - 2024.1 日本語

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

Document ID
UG1393
Release Date
2024-07-03
Version
2024.1 日本語

説明

入れ子になっているループを 1 つのループ階層にフラット化します。

RTL インプリメンテーションでは、ループ階層にあるループ間の移動に 1 クロック サイクルかかります。入れ子のループをフラットにすると、それらを 1 つのループとして最適化できるので、クロック サイクル数を削減でき、ループ本文のロジックをさらに最適化することが可能です。

完全ループの入れ子
  • 最内ループのみにループ本体の内容が含まれます。
  • ループ文の間に指定されるロジックはありません。
  • すべてのループ範囲は定数です。
半完全ループの入れ子
  • 最内ループのみにループ本体の内容が含まれます。
  • ループ文の間に指定されるロジックはありません。
  • 最外ループの範囲は変数にできます。
不完全ループの入れ子

内側のループの範囲が変数であったり、ループ本体が内側のループにのみ含まれているとは限らない場合、コードの構造を変更するか、ループ本体内のループを展開して、完全ループの入れ子を作成してみてください。

構文

syn.directive.loop_flatten=[OPTIONS] <location>
  • <location>: 場所 (最内ループ) を function[/label] の形式で指定します。

オプション

off
フラット化が実行されないようにします。指定の場所の一部のループはフラット化せず、それ以外のループをフラット化することもできます。
重要: LOOP_FLATTEN プラグマまたは指示子を使用すると、最適化がイネーブルになります。off を使用すると、ディスエーブルになります。

関数 foo 内の loop_1 と、ループ階層でこれより上にあるすべてのループ (完全または半完全) を 1 つのループにフラット化します。

set_directive_loop_flatten=foo/loop_1

関数 fooloop_2 でループがフラット化されないようにします。

set_directive_loop_flatten=off foo/loop_2