0

(a->b->c)->(a->b->c)->... のように、真の依存関係によってリンクされ、定期的に繰り返される (つまり、ループ) 一連の命令があるとします。

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

  • (a0->b0->c0)->(a0->b0->c0)->...
  • (a1->b1->c1)->(a1->b1->c1)->...

アウトオブオーダー エンジンは、各命令を対応する CPU ユニットにスケジュールします。これらの CPU ユニットには、待ち時間と逆数のスループットがあります。

実行スループットを最大化するサブ依存チェーンの最適な数は?

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

4

1 に答える 1

0

それらの長さと、それぞれが単独で実行できるサイクルごとの uop の数によって異なります。

また、ハードウェアの幅にも依存します。例えば

  • 2 つの ALU 実行ユニットと 1 クロックあたり 3 つの融合ドメイン uop スループットと比較した PIII。
  • 4 つの ALU 実行ユニット (ベクトルを処理できるのはそのうちの 3 つだけ) と、クロックごとに 4 つの融合ドメイン uop スループットを備えた Haswell。

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


良い例は FP 加算です (例: 配列の合計):

Sandybridge では、スループットは 1 クロックあたり 1 ですが、レイテンシは 3c であるため、従属addps命令の単一チェーンは 3c あたり 1 uop で実行され、最大 FP 乗算スループットの 1/3 しか維持されません。(そして、他の 2 つの実行ポートは完全に空のままにします。)

3 つの並列 dep チェーンにより、ポート 1 を命令で飽和状態に保つことができaddpsます。したがって、3 つのアキュムレータを使用すると、3 つのアドを飛行中に維持できます。また、飛行中に 5 つの FP 乗算を維持すると、ポート 0 も飽和させることができます。ループ オーバーヘッドがポート 5 で実行される可能性があります (p01 からサイクルを盗まないことを願っています)。ロード uop は add とマイクロ融合できるため、融合ドメインの帯域幅を消費しません。ただし、ロードの一部を個別のmovaps命令で実行しても、クロックあたり 4 つの融合ドメイン uop スループットを飽和させることはできませんが、フロントエンドのボトルネックによってスループットが制限される可能性があります。


Haswell の FP add のスループットはクロックごとに 1 つだけですが、FP mul と FMA のスループットはクロックごとに 2 つです。

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


Skylake は、FMA のレイテンシを 1 サイクル減らして 4 まで減らし、FP 追加ユニットを削除しました。(したがって、FP の追加は FMA ユニットで行われ、[v]addps1c の遅延が発生する代わりに のスループットが 2 倍になります)。

したがって、SKL では、p01 を飽和させるために 8 つのベクトル アキュムレータ (8 つの dep チェーン) のみが必要です。しかし、レジスターを使い果たしない限り、dep チェーンを増やしても問題はありません。したがって、10 個のアキュムレータを使用する Haswell で理想的なコードは、SKL でも理想的であるはずです。ただし、定数ベクトル 1.0 のaddps代わりに(または何でも) を使用するだけで、電力を節約できるかもしれません。fma213ps


スループット/レイテンシ/ポート番号については、Agner の命令表を参照してください。詳細については、彼の microarch PDF を参照してください。ポート番号やレイテンシー番号はチェックしませんでしたが、この例を何度も入力したので、正しいと確信しています:P.

タグ wikiの他のリンクも参照してください。

于 2016-07-21T07:48:45.177 に答える