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

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

3.1. コンポーネントに適したインターフェイスの選択

コンポーネント・インターフェイスが異なると、コンポーネントの結果の品質 (QoR) に影響します。このとき、コンポーネント・アルゴリズムは変更されません。インターフェイスの違いによる影響について考慮した上で、コンポーネントのインターフェイスを選択してください。

コンポーネントに最適なインターフェイスが、すぐに明らかにならない場合もあるでしょう。その場合は、さまざまなインターフェイスをコンポーネントに対して試してみて、最適なQoRを実現することが必要になることがあります。 インテル®HLSコンパイラー プロ・エディションで提供されるコンポーネントの高速コンパイル時間や、その結果得られるHigh Level Designレポートを活用して、コンポーネントに最適なQoRを提供するインターフェイスを決定します。

この項では、ベクトルの追加例を使用して、コンポーネント・アルゴリズムを同じ状態に保った場合のコンポーネント・インターフェイスの変更による影響について説明します。この例では、ベクトル a とベクトル b の2つの入力ベクトルがあり、結果をベクトル c に格納します。ベクトルの長さは N です (これは非常に大きくなる可能性があります)。

コア・アルゴリズムは次のとおりです。
  #pragma unroll 8
  for (int i = 0; i < N; ++i) {
    c[i] = a[i] + b[i];
  }

インテル®HLSコンパイラー プロ・エディションでは、ループに依存関係が存在しない場合、このアルゴリズムの並列性を抽出するために、ループをパイプライン処理します。また、ループを (係数8で) 展開することで、より多くの並列性が抽出できます。

生成されたコンポーネントの理想的なレイテンシーは、N/8サイクルです。次の項で挙げる例では、1024の値は N に使用されるため、理想的なレイテンシーは128サイクル (1024/8) です。

次のいくつかの項で示すとおり、この例のバリエーションでは、異なるインターフェイスを使用しています。それぞれのインターフェイスがこのコンポーネントのQoRにどのような影響を及ぼすかを確認してください。

このような例のそれぞれのバリエーションについては、 <quartus_installdir>/hls/examples/tutorials/interfaces/overview にあるチュートリアルを確認してください。