インテル®高位合成 (HLS) コンパイラー プロ・エディション: ベスト・プラクティス・ガイド

ID 683152
日付 12/16/2019
Public
ドキュメント目次

4. ループのベスト・プラクティス

インテル®HLS (高位合成) コンパイラーでは、ループをパイプライン処理してスループットを向上させます。このループのベスト・プラクティスでは、ループを最適化してコンポーネントのパフォーマンスを向上させる手法を身に付けることができます。

インテル®HLSコンパイラー プロ・エディションでは、ループの最適化を妨げる依存関係があるかどうかを知らせます。コード内にそのような依存関係がある場合は、それを排除して、コンポーネントのパフォーマンスを最適化してください。さらに、追加のガイダンスをコンパイラーに対して提供することもできます。このためには、入手可能なループプラグマを使用します。

まず、次の手法を試してください。
  • 隣接するループ本体の命令を並列実行できる場合は、そのループ本体を手動で融合します。この融合ループは、順次実行せずにパイプライン処理します。パイプライン処理によって、コンポーネントのレイテンシーが短縮され、コンポーネントで使用するFPGA領域の削減ができます。
  • #pragma loop_coalesce ディレクティブを使用して、ネストされたループの折りたたみをコンパイラーに試行させます。ループを結合すると、コンポーネントのレイテンシーが短縮され、ネストされたループに必要なFPGA領域のオーバーヘッドを削減することができます。
  • 2つのループの並列実行が可能な場合は、タスクのシステムの使用を検討してください。詳しくは、タスクのシステム を参照してください。

ループのベスト・プラクティスに関するチュートリアル

インテル®HLSコンパイラー プロ・エディションに付属している多数のチュートリアルでは、 インテル®HLSコンパイラーの重要な概念や優れたコーディング・プラクティスを示しています。

次のチュートリアルを確認して、デザインに適用できる可能性のあるループのベスト・プラクティスを身に付けます。
チュートリアル 説明
この表のチュートリアルは、 インテル® Quartus® Primeシステム内の次の場所にあります。
<quartus_installdir>/hls/examples/tutorials
best_practices/ loop_coalesce ネストされたループで loop_coalesce プラグマを使用した場合のパフォーマンスとリソース使用率の向上について示します。
best_practices/ loop_memory_dependency ループ伝送された依存関係の解除をivdepプラグマを使用して行う方法について示します。
best_practices/ resource_sharing_filter 次のバージョンの32タップ有限インパルス応答 (FIR) フィルターデザインについて示します。
  • スループット最適化バリアント
  • 領域最適化バリアント
best_practices/ divergent_loops 発散ループを備えたデザインのソースレベルを示します。
best_practices/ triangular_loop 依存関係を持つ三角ループパターンの記述方法を示します。
loop_controls/ max_interleaving
次の条件を満たすループの領域使用率の削減方法を示します。
  • ループのIIが > 1
  • ループがパイプライン化されたループに含まれている
  • パイプライン化されたループの呼び出し間でループの実行がシリアル化されている
best_practices/ relax_reduction_dependency

浮動小数点アキュムレーターを含むループのIIの削減方法、またはその他の単一クロックサイクルでは高速計算ができない削減動作について示します。