CPU Wiki:Sandy Bridge Microarchitecture 1



Cpu Wiki Sandy Bridge Microarchitecture 1



サンディブリッジ これは、NetBurstおよびP6以降のまったく新しいマイクロアーキテクチャと見なすことができます。 Sandy Bridgeは、最も画板の段階をさかのぼり、P6とNetBurstから多くの有益な構造を導入しました。 NetBurstは重大な欠陥のある構造ですが、Sandy Bridgeで再実装および強化された、いくつかの重要なイノベーションが導入されています。これは、P4およびP6構造が基本的にネハムレムまで導入されなかった初期のコア構造とは異なります。 Sandy Bridgeは、前任者の利点を紹介し、強化します。
画像

パイプライン
SandyBridgeは、マイニングパフォーマンスと消費電力の削減に重点を置いています。インテルは、消費電力の削減とパフォーマンスの向上に重点を置き、パフォーマンスから電力への非線形の改善を実現しました。これらの機能強化は、フロントエンドとバックエンドで確認できます。

フロントエンド
フロントエンドの課題は、主にメモリから複雑なX86命令を読み取り、それらをデコードして、実行ユニットに渡すことです。言い換えると、フロントエンドは十分なuOpsを継続的に送信できる必要があります。バックエンドがビジーになるように、命令コードストリームに移動します。バックエンドが十分に活用されていない場合、コアは彼のすべてのパフォーマンスを再生することはできません。フロントエンドが弱いか不完全な場合、バックエンドに深刻な影響を及ぼし、最終的にパフォーマンスが低下します。 Sandy Bridgeの場合、この課題は、リダイレクトされたブランチとX86命令自体の複雑な性質によってさらに複雑になりました。

フェッチとプリデコード
コアに到達するメモリブロックは、キャッシュから取得されるか、リングを介して他のキャッシュから移動されます。場合によっては、メインメモリからも移動されます。まず、命令をL2Cacheからフェッチして、L1cacheに保存する必要があります。 L1cacheは32KBで、8つのウェイグループで接続されています。命令キャッシュのサイズはNehalemと同じですが、グループ接続の数は8ウェイに拡張されています。 Sandy Bridgeは、16バイトのフェッチウィンドウを使用して命令をフェッチしました。このウィンドウのサイズは何世代にもわたって変更されていません。サイクルあたり最大16バイト。フェッチとは、2つのスレッド間の公平な切り替えを指すことに注意してください。したがって、各スレッドは別のサイクルで命令をフェッチできます。現時点では、それらはまだmarco-ops(X86可変長命令)です。命令は、初期準備のために事前デコードバッファに保存されます。

X86命令は、複雑な可変長可変長エンコーディングであり、さまざまな操作を含めることができます。プリデコードバッファでは、命令の境界が検出され、マークが付けられます。各命令の長さを1バイトから15バイトに変更できるため、これは非常に難しい作業です。 1つの命令の長さを決定する場合でも、数バイトの命令を検出する必要があります。境界の検出に加えて、命令プレフィックスもデコードされ、ブランチなどの一部の機能を検出する必要があります。以前のマイクロアーキテクチャと同様に、プリデコーダーのスループットは、16バイトが完全にダイジェストされるまで6マクロ操作です。プリデコーダーは、16バイトをダイジェストせずに新しい16バイトブロックを取得しないことに注意してください。たとえば、新しいデータブロックがロードされると、7つの命令が生成されます。最初のサイクルでは6つの命令が処理され、2番目のサイクルでは残りの1つの実行でサイクル全体が無駄になります。このスループットは、予想される3.5よりも低くなります。 5つの命令があり、最初の4バイトが1バイトの場合、最初のサイクルで4つの命令が処理され、2番目のサイクルで処理できるのは1つの命令のみです。長さ変更プレフィックス(LCP)によって追加のデコード前の損失が発生する特殊なケースがあることに注意してください。実際のコードは通常4バイト未満であり、良好な結果が得られます。

画像
分岐予測
フェッチ操作と、命令の流れの予測を担当する分岐予測ユニット(BPU)は同時に機能します。すべての分岐は、BPUを使用して、戻り、間接呼び出しとジャンプ、直接呼び出しとジャンプ、条件分岐など、方向を予測します。すべての世代のIntelビットアーキテクチャプロセッサと同様に、分岐予測も改善されています。分岐予測子を増やすと、パフォーマンスが直接向上し、消費電力が削減されます。パイプラインが長いため、フラッシュ操作は非常に高価であり、飛行中の150の命令を放棄します。 NehalemでSandyBridgeを作成および導入した大きな変更は、フロントエンドとバックエンドのBPU関連の分離です。 Nehalemの前は、フロントエンドを再操作する前に、パイプライン全体を完全にフラッシュする必要がありました。これはNehalemで再設計されているため、フロントエンドは正しい方向を認識するとすぐにデコードを開始できますが、同時に、バックエンドはフラッシュで誤ったuOpsを予測し続けます。これにより、誤った予測のコストを削減できます。さらに、SandyBridgeの分岐予測は完全に再設計されました。分岐予測期間では、Nehalemにいくつかのメカニズムが導入されます。間接ターゲットアレイ(ITA)、分岐ターゲットバッファー(BTB)、ループ検出器(LD)、および名前が変更されたリターンスタックバッファー(RSB)です。

ニアリターンの場合、SandyBridgeには16エントリのリターンスタックバッファがあります。 BTBはシングルステージ構造であり、Nehalem L1 / 2BTBエントリの2倍を節約します。この変更により、予測カバレッジが改善されるはずです。興味深いことに、Nehalem Core以前のアーキテクチャでは、これも単一レベルの構造です。ほとんどのブランチはブランチごとにそれ以上のビットを必要としないため、変位が大きいブランチには個別のテーブルが使用されます。 Sandy Bridgeの4096ターゲットBTBテーブルは、4チャネルの1024グループで構成されています。
Sandy Bridgeではグローバル履歴情報テーブルは増加していませんが、予測精度を向上させることができない履歴を削除することでパフォーマンスが向上しています。さらに、グローバル履歴情報テーブルは、データに依存する動作のより長い履歴を保持し、より効果的な履歴情報を格納します



命令キューとMOP-融合事前にデコードされた命令は、命令キュー(IQ)に送信されます。 Nehalemでは、命令キューは18エントリに増加し、2つのスレッドで共有されます。 Sandy Bridgeは、スレッドあたり20の数を増やし、合計40になりました。

画像
命令キューの重要な最適化は、マクロ操作の融合です。場合によっては、SandyBridgeは2つのマクロ操作を1つの複雑な操作にマージできます。命令ストリーム内のテストまたは比較の後に条件付きジャンプが続くことが検出された場合、それらは単一のcompare&branch命令に変換されます。 Sandy Bridgeでは、Intelはマクロ操作の融合機能の範囲を拡大しました。 Macro-fusionは、ADDやSUBなどの命令をJUMPとマージできるようになりました。これは、より多くのケースをマージできることを意味します。おそらく最も重要なケースは、典型的なカウンターとそれに続く条件分岐のループです。これらはマージできます。これらの命令は、パイプライン全体で融合されています。ブランチユニットが実行されると、それは完全に融合された命令でもあるため、すべての位置から帯域幅を節約します。ただし、このような融合は1サイクルにつき1つしか完了できません。

私の公開番号「プロセッサとAIチップ」に注目することを歓迎します