インテル® HLS コンパイラー: リファレンス・マニュアル

ID 683349
日付 6/23/2017
Public
ドキュメント目次

1.7.3. ループ・イニシエーション・インターバル (II)

iiプラグマを使用して、プラグマ宣言に続くループのループ・イニシエーション・インターバル (II) を設定するように、 インテル® 高位合成 (HLS) コンパイラーに指示します。コンパイラーがループに対して指定された II を達成できない場合、コンパイルエラーが出力されます。

反復インターバル、または II は、連続するループ反復を開始する間のクロックサイクル数です。II 値が高いほど、次のループ反復までの待機時間が長くなります。

コンポーネントのいくつかのループでは、コンパイラーが選択するよりもより高い II をiiプラグマで指定すると、スループットを損なうことなく componentの最大動作周波数 (fmax) を上げることができます。

ループが次の条件を満たしている場合、iiプラグマを適用するのに適しています。
  • ループが コンポーネントのスループットにとって重大ではない場合
  • ループの実行時間が含まれる可能性のある他のループと比較して短時間の場合
ループでのループ・イニシエーション・インターバルを指定するには、次のようにループの前にプラグマを指定します。
#pragma ii <desired_initiation_interval>
<desired_initiation_interval> パラメーターは必須であり、連続するループ・インターバルの間に待機するクロックサイクル数を指定する整数です。

コンポーネントに 2 つの異なるパイプライン可能なループがある場合、すなわち、ループ伝搬依存性を持つショートラニング初期化ループと処理の大半を実行するロングラニング・ループの場合を考慮します。この場合、コンパイラーは初期化ループがデザインの全体的なスループットに及ぼす影響がはるかに小さいことを認識しません。コンパイラーは可能であれば II の値が 1 の両方のループをパイプライン化しようとします。

初期化ループはループ伝搬依存性があるため、生成されたハードウェアにはフィードバック・パスがあります。このようなフィードバック・パスのある II を達成するには、いくつかのクロック周波数を犠牲にする能性があります。メインループのフィードバック・パスに応じて、残りのデザインがより高い周波数で動作する可能性があります。

初期化ループで#pragma ii 2プラグマを指定すると、このループで II を最適化するアグレッシブが少ないことがコンパイラーに通知されます。少ないアグレッシブの最適化は、コンパイラーがパスをパイプライン化して最大動作周波数 (fmax) を制限できるようにし、 コンポーネントデザイン全体でより高い fmaxが達成できます。

初期化ループは、新しい II で実行するのに長時間を要します。しかしながら、fmaxが高いため、ロングランニング・ループの実行時間が短くなると、初期化ループの実行時間の長さは増加します。