インテル® Quartus® Primeプロ・エディション ユーザーガイド: デザインのコンパイル

ID 683236
日付 12/16/2019
Public

このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。

ドキュメント目次

1.9.6. フラクタル合成の最適化

フラクタル合成の最適化は、ディープラーニング・アクセラレーターに役立ちます。また、その他の高スループットの算術集約型デザインが、使用可能なすべてのDSPリソースを上回る場合にも役立ちます。このようなデザインの場合、フラクタル合成の最適化により、20%から45%の領域を削減できます。

フラクタル合成は、演算集約型デザインに最適な方法でFPGAリソースを使用する複数の合成最適化の集合です。この合成最適化を構成しているのは、乗算器の正則化とリタイミング、および連続算術パッキングです。最適化の対象となるデザインでは、低精度の算術演算 (加算や乗算など) を多数備えています。フラクタル合成のイネーブルは、グローバルに、または特定の乗算器に対して行います。詳しくは、フラクタル合成のイネーブルとディスエーブル で説明します。

プロジェクト全体のフラクタル合成に関する考慮事項

注: フラクタル合成の最適化の条件に最も合うデザインは、ディープラーニング・アクセラレーターを備えている場合や、デザインの他の高スループットの算術集約機能がすべてのDSPリソースを上回る場合です。フラクタル合成をプロジェクト全体でイネーブルすると、フラクタル最適化に適していないモジュールに不要な膨張が発生することがあります。フラクタル合成の最適化をプロジェクト全体でイネーブルする前に、次の要因を考慮してください。
  • インテルFPGAデバイスでは、算術演算に最適なハードDSPブロックを数千個格納しています。デザインの算術関数の合計数が少ない場合は、フラクタル合成をイネーブルする必要はありません。このような場合、すべての算術関数はデフォルトでDSPに直接マップされます。グローバルフラクタル合成をイネーブルするのは、DSPブロックが十分ないために、実装できない算術コンポーネントがある場合のみです。フラクタル合成のイネーブルは、CompilerによるDSPへのマッピングを望まないモジュールに対してのみ行います。
  • 現在のバージョンの インテル® Quartus® Primeプロ・エディション開発ソフトウェアの場合、フラクタル合成の最適化のターゲットは、低精度の乗算です。高精度 (各オペランドの幅が11ビットを超える) 乗算器の実装には、DSPブロックを使用します。
  • フラクタル合成をプロジェクト全体でイネーブルすると、次のような情報メッセージ番号20193が、コンパイル中に生成されることがあります
    Applied dense packing to "<entity>". Area: 2 LABs. Logic density: 0.775.

    この情報によって分かるのは、Compilerでは、計算ロジックをパッキングして少数のLABにしようとしていることです。デザインの使用率がすでに高い場合、Compilerでは、このステージを省略できます。

    • メッセージによるレポートで、Areaが100 LABを超えていないことを確認してください。もし100 LABを超えている場合は、フラクタル合成ブロックをサブブロックに分割し、フラクタル合成最適化をサブブロックに個別に割り当てます。
    • メッセージによるレポートで、Logic密度が0.75より大きいことを確認してください。もし0.75未満の場合は、このエンティティーのFractal Synthesisをディスエーブルします。これは、標準的な合成では、より良好な密度が達成できるためです。
表 19.  フラクタル合成の領域改善
    Area (LAB)
デバイス ドット積 フラクタル合成がONの場合 フラクタル合成がOFFの場合
インテル® Arria® 10および インテル® Cyclone® 10 GX 16 4x4smの合計 12 19
16 5x5smの合計 19 32
16 6x6smの合計 25 36
16 7x7smの合計 34 44
16 8x8smの合計 45 60
インテル® Stratix® 10および インテル® Agilex™ デバイス 16 4x4smの合計 15 22
16 5x5smの合計 21 39
16 6x6smの合計 29 47
16 7x7smの合計 39 55
16 8x8smの合計 55 71

乗算器の正則化とリタイミング

乗算器の正則化とリタイミングでは、高度に最適化されたソフト乗算器の実装を推論します。Compilerでは、必要に応じて、後方リタイミングを2つ以上のパイプライン・ステージに適用します。フラクタル合成をイネーブルすると、Compilerでは、乗算器の正規化とリタイミングを、符号ありおよび符号なし乗算器に対して適用します。

図 49. 乗算器のリタイミング
注:
  • 乗算器の正規化では、ロジックリソースのみを使用し、DSPブロックは使用しません。
  • 乗算器の正規化とリタイミングは、FRACTAL_SYNTHESIS QSF 割り当てが設定されているモジュールの符号あり乗算器と符号なし乗算器の両方に適用されます。

乗算器の正則化の例

次のシンプルな符号なしドット積のデザイン例には、5ビットオペランドの乗算演算子が含まれています。この短い乗数は、乗算器の正則化に最適な候補です。

(* altera_attribute = "-name FRACTAL_SYNTHESIS ON" *)
module dot_product(
   input clk,
   input [4:0] a, b, c, d, e, f, g, h,
   output reg [11:0] out
);
reg [9:0] ab, cd, ef, gh;
reg [10:0] ab_cd, ef_gh;

always @(posedge clk)
begin
	ab <= a * b;
	cd <= c * d;
	ef <= e * f;
	gh <= g * h;
	ab_cd <= ab + cd;
	ef_gh <= ef + gh;
	out <= ab_cd + ef_gh;
end
endmodule

module top(
   input clk,
   input [4:0] a1, b1, c1, d1, e1, f1, g1, h1,
   input [4:0] a2, b2, c2, d2, e2, f2, g2, h2,
   output [11:0] out1, out2
);
dot_product core1(.clk(clk), .a(a1), .b(b1), .c(c1), .d(d1), 
    .e(e1), .f(f1), .g(g1), .h(h1), .out(out1));
dot_product core2(.clk(clk), .a(a2), .b(b2), .c(c2), .d(d2), 
	.e(e2), .f(f2), .g(g2), .h(h2), .out(out2));
endmodule

インテル® Quartus® Prime合成では、次のメッセージをコンソールに出力します。

図 50. コンソールメッセージ

Chip Plannerでは、このデザインに符号なしドット積コアが2つあることが分かります。この2つのコアは、個別に最適化され、配置されます。LABリソースは、次の図に示すように、ほぼ100%最適化されます。

図 51. デザイン配置

符号付きドット積は、ディープラーニング・アプリケーションでは一般的です。次で示しているのは、符号付きドット積の例です。

(* altera_attribute = "-name FRACTAL_SYNTHESIS ON" *)
module dot_product(
   input clk,
   input [4:0] a, b, c, d, e, f, g, h,
   output reg [11:0] out
);
reg [9:0] ab, cd, ef, gh;
reg [10:0] ab_cd, ef_gh;

always @(posedge clk)
begin
	ab <= a * b;
	cd <= c * d;
	ef <= e * f;
	gh <= g * h;
	ab_cd <= ab + cd;
	ef_gh <= ef + gh;
	out <= ab_cd + ef_gh;
end
endmodule

module top(
   input clk,
   input [4:0] a1, b1, c1, d1, e1, f1, g1, h1,
   input [4:0] a2, b2, c2, d2, e2, f2, g2, h2,
   output [11:0] out1, out2
);
dot_product core1(.clk(clk), .a(a1), .b(b1), .c(c1), .d(d1), 
    .e(e1), .f(f1), .g(g1), .h(h1), .out(out1));
dot_product core2(.clk(clk), .a(a2), .b(b2), .c(c2), .d(d2), 
	.e(e2), .f(f2), .g(g2), .h(h2), .out(out2));
endmodule

インテル® Quartus® Prime合成では、次のメッセージをコンソールに出力します。

図 52. コンソールメッセージ

Chip Plannerでは、このデザインに符号ありドット積コアが2つあることが分かります。

図 53. デザイン配置

連続算術パッキング

連続算術パッキングでは、算術ゲートを最適なサイズのロジックブロックに再合成して、インテルFPGA LABにフィットさせます。この最適化により、LABリソースを最大100%、算術ブロックに対して使用できるようになります。

フラクタル合成をイネーブルすると、Compilerでは、この最適化をすべてのキャリーチェーンおよび2入力ロジックゲートに適用します。この最適化では、加算器ツリー、乗算器、およびその他の算術関連ロジックのパッキングができます。

図 54. 連続算術パッキング

連続算術パッキングは、乗算器の正則化とは無関係に機能します。したがって、使用している乗算器が正則化されていない場合 (独自の乗算器の作成など)、連続算術パッキングは引き続き機能します。