このページの本文へ

Sandy Bridgeこと新Core iシリーズが登場 第2回

詳細解説 これがSandy Bridgeのアーキテクチャーだ

2011年01月06日 11時30分更新

文● 大原雄介(http://www.yusuke-ohara.com/

  • この記事をはてなブックマークに追加
  • 本文印刷

CPUコア

図2

図2 Sandy BridgeのCPUコアの内部構造

 図2はSandy BridgeのCPUコアの内部構造である。基本的な構造はNehalem/Westmere(32nmプロセスのCore iシリーズ、以下略)世代のアーキテクチャーを踏襲しており、4命令同時フェッチ/デコードのインオーダー部と、6命令分の実行ポートを持つアウトオブオーダー部の組み合わせとなっている。

 ただし、当然ながら細かいところでは、いろいろと相違点がある。まずインオーダー部(図2ではスケジューラーより上側)に関しては、従来から引き続いて「Loop Stream Detector」(LSD)※1という仕組みが設けられている。
※1 プログラム中の繰り返し構造を認識し、小規模なループであれば命令デコーダーを動かさずに内部バッファから命令を供給する。

 Nehalem世代の場合、このLSDは28μOp(マイクロオプス、CPU内部で実際に処理される小命令)分のバッファを持っていたが、Sandy Bridgeではこれが一挙に1500μOp分まで大幅拡張された。これに加えて、「分岐予測も従来より強化された」という話であるが、その点については詳細不明である。

 デコーダーに関してはもうひとつ、新たに「Zeroing Idioms」という機構も搭載された(図2ではAllocateの辺りに含まれる)。これは、実行ユニットを動かすまでもない命令※2は、命令を発行せずに処理を済ませてしまうというものだ。これにより、実行ユニットの効率向上と省電力化の両方を狙う。
※2 例えば「XOR AX,AX」といった、AXレジスターをクリアするだけの命令。

 続くアウトオブオーダー部も見てみよう。先述のとおり、6命令分の実行ポートという構成や、ALUが3ポート、LSU(Load Store Unit)が3ポートという配分などは、Nehalem世代と同じである。その意味では、Sandy Bridgeのアウトオブオーダー部は「Nehalemのアウトオブオーダー部を改良したもの」と言っても差し支えない。その改良点であるが、大きく目立つものとして以下の2点が挙げられる。

  • AVX命令の実装
  • Load/Store Addressのスループットを倍に強化

 まずAVXの実装について説明しよう。図3のようにALUはPort 0、1、5に割り当てられている。Nehalem世代の場合、整数演算ならば汎用レジスターを、整数演算のSSE命令ならばSSEレジスターをInteger型(整数型)として、浮動小数点演算のSSE命令ならばSSEレジスターをFloat/Double型(浮動小数点型)として、それぞれ扱うようになっている。

図3

図3 ALUポートの構造

 AVX命令では、このSSEレジスターへの操作をそのまま流用するように実装されている。そのためAVXレジスターは256bit幅にも関わらず、128bit幅のSSE演算ユニットを使って、計算できるようになったわけだ。

 例えば、Port 1でAVXの加算命令を行なう場合、まず前半128bit分をSSEのInteger用インターフェース(I/F)「SSE INT ADD」を流用して演算結果を書き込む。次に、SSE Float/Double用のI/F「FP ADD」を流用して、後半128bit分の演算結果を書き込む、という処理を行なう。演算ユニットそのものを256bit化するのは、性能面ではメリットがあっても、消費電力や回路規模の増大の観点から好ましくない、と判断したようだ。

 なおAVXの詳細については、こちらの記事も参照していただきたい。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン