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

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

1.7. ループ

HLSコンパイラーはループをパイプライン化して定義するさまざまなコンポーネントのスループットを最大化しようと試みます。

ループのパイプライン化は、HLSコンパイラーがループの後続の反復をパイプライン並列処理方式で実行できるようにします。パイプライン並列処理実行とは、複数のループの反復が実行中の異なる時点で同時に実行することを意味します。また、パイプライン化ループは、生成されたハードウェアの使用を最大限にするのに役立ちます。

一部のケースではパイプライン化ができない場合があります。ループの新しい反復処理は、前の反復処理後 N サイクルまで開始されません。ループ反復処理が開始されるまで待機しなければならないサイクル数は、ループのイニシエーション・インターバル (II) と呼ばれます。一般的にイニシエーション・インターバの値は 1 が理想的です。II > 1の場合の通常のケースは、最適化レポートに示されているように、後続のループ反復間にループ伝搬依存性がある場合です。回路はループの新しい反復処理の開始前にこれらのループ伝搬依存性が解決されるのを待機する必要があります。可能であれば、コンパイラーが低い II 値を持つループのスケジュールを生成できるように、ループ伝搬依存性を削減します。

ネストされたループの場合、クリティカルな内側のループが作業の大部分を実行すると、外側のループのII > 1は重要なパフォーマンス・リミッターとはみなされません。一般的なパフォーマンス・リミッターの 1 つは、HLSコンパイラーが内側のループのトリップ数 ( 可変内部ループトリップ数など ) を静的に計算できない場合です。既知のトリップ数がない場合、コンパイラーは外側のループをパイプライン処理できません。