0

例えば、(a→b→c)→(a→b→c)→...実行スループットを最大限にする依存関係チェーンの最小数はいくらですか?

のような真の依存関係によってリンクされ、周期的に繰り返される

アウトオブオーダー実行の恩恵を受けるために、いくつかの短いと独立したサブ依存チェーンに分割することができますと仮定すると:

  • (A0-> b0-> C0) - >(A0-> b0-> C0) - > ...
  • (A1-> B1-> C1) - >(A1-> B1-> C1) - > ...

アウトオブオーダエンジンスケジュール各インストラクション待ち時間と相互スループットを持つ対応するCPUユニットに接続してください。

実行スループットを最大限にするサブ依存性チェーンの最適数はいくらですか?

AgnerのマニュアルOptimizing subroutines in assembly languageによると、12.15節「依存性チェインで最も重要な命令のレイテンシをその命令の逆数スループットで割ったものがCPUに何もない場合の最適なアキュムレータの数」です。 「最も重大な指導」とは何を意味しますか?この種の問題に取り組む他の技術文書はありますか?

答えて

0

どれくらい時間がかかっているのか、1回のサイクルごとにどれだけ多くのuopsを実行できるかによって異なります。

また、ハードウェアの幅によって異なります。例えばクロック融合ドメインUOPスループット対4つのALU実行ユニット(3つだけそのベクトルを扱うことができる)、及びクロック融合ドメインUOPあたり4と

  • ハズウエル当たり

    2つのALU実行ユニットと
    • PIII及び3スループット。

    私が「最も重要な命令は、」クリティカルパスの長さの大部分を占めるものを意味だと思います。ループによって運ばれる依存関係チェーンが異なるレイテンシを持つ複数の命令で構成されている場合、それはある種の平均です。 (?のように多分幾何平均)


    良い例は、FPが(例えば、配列を合計する)を追加です:

    Sandybridgeでは、それは1あたりのクロックスループットが、図3cの待ち時間を持っているので、単一依存するaddps命令のチェーンは、3cごとに1μopで実行され、最大FP多重スループットの1/3しか維持しません。 (残りの2つの実行ポートはまったく空いています)

    パラレルデプレッションチェーンは、ポート1をaddps命令で飽和状態に保つことができます。 3つのアキュムレータを使用すると、飛行中に3つのアキュムレータを維持することができます。飛行中に5 FPの倍数を維持すると、port0も飽和させることができます。ループオーバーヘッドはポート5で実行できます(p01のサイクルを盗むことはできません)。負荷uopsは追加によってマイクロヒューズすることができるため、融合ドメイン帯域幅を占有しません。しかし、いくつかの負荷を個別のmovaps命令で実行することはできますが、クロック当たり4つのfused-domain uopスループットは飽和しませんが、フロントエンドのボトルネックはスループットを低下させる可能性があります。HaswellはFP加算の場合は1クロックスループットを1つしか持たず、FP mulおよびFMAの場合はクロックごとに2つしか持たない。

    したがって、FMA(乗数1.0)を使用して配列を合計すると、10個のFMAを飛行中に保ち、p01を飽和させるために10個のベクターアキュムレータ(10個のデポチェイン)が必要です。 p5とp6は使用されませんが、ロードポートにマイクロヒューズ負荷を飽和させることもできます。


    Skylakeマイクロアーキテクチャは、ダウン4に、1サイクルFMAの待ち時間を低減し、及びFPは、ユニットを追加滴下。 (したがって、FP加算はF39ユニットで行われ、[v]addpsのスループットが2倍になり、レイテンシが1c増加します)。

    したがって、SKLでは、p01を飽和させるために8つのベクトルアキュムレータ(8つのデプチェーン)が必要です。しかし、あなたがレジスターを使い果たしていない限り、より多くのデパンチを持つことは痛いことではありません。だからHaswellで理想的なコードは、10個のアキュムレータを使用しても、SKL上では理想的です。あなたは(または何でも)の代わりにaddpsを使用して一定のベクトル1.0でいくつかのパワーを節約することができます。


    詳細については、スルー/レイテンシ/ポート番号についてはAgnerの指示表を参照してください。ポート番号や待ち時間の数値はチェックしませんでしたが、この例をよく入力したので、それが正しいと確信しています:P。

    タグwikiの他のリンクも見てください。

  • +0

    この非常に実用的で詳細な答えをお寄せいただきありがとうございます。しかし、誰かがこの問題を解決するための理論的資料を持っていれば、非常に感謝しています。 – DMH

    +0

    @DMH:一連の命令のスループットとレイテンシの比を計算すると、レイテンシの代わりにスループットのボトルネックになるために飛行しなければならないコピーの数が決まります。これは、長さと、ループで運ばれているかどうか(短いループに依存する依存関係を減らすために複数のアキュムレータを使用する場合など)に応じて、手動でインターリーブすることを意味する場合もあれば、 –

    関連する問題