このページの本文へ

ロードマップでわかる!当世プロセッサー事情 第72回

Core iシリーズにも使われる「SMT」の利点と欠点

2010年10月14日 12時00分更新

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

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

トランジスターを増やさずに実装できるSMT

 話を戻すと、こうしたスレッドはしばしば、同一のプロセスに属している。これを前ページ図1のようなデュアルコア構成でロードする場合、結果的に両方の1次キャッシュに同じプログラム/データがロードされかねず、無駄が多い。であれば、「同時に複数のスレッドを実行できるようにすれば、キャッシュの効率も上がるし、実行ユニットの効率も上がるのでは?」というアイディアが出てきた。これがSMTである。

 具体的にはどんな形になるのか?というのが図2である。一見Re-Order Bufferが増えているだけであるが、これは実のところあまり正確ではない。

図2

図2 SMTに対応したCPUのパイプライン。前ページ図1と比べて、Re-Order Bufferが2つになっている

 図3は、インテルが「Pentium 4」で実装したHyper-Threadingでの、内部構造をまとめたものである。Cache Fillに到るまでが2段に分かれているのは、上段がTrace Cacheにヒットした場合で、下段がキャッシュミスで2次キャッシュから命令を取り込んだ場合である。赤と黄色は、それぞれの別のスレッドの命令/データであることを示している。

図3

図3 Pentium 4の内部構造をパイプライン順に

 図3にあるように、基本的にはパイプライン構造はまったく同じであるが、以下のユニットはそれぞれのスレッドにあわせて、二重化されている。

  • IP(命令ポインタ)を含む汎用レジスター
  • TLB(Translation Look-aside Buffer)
  • Register Renaming/Allocate

 また、各種キュー(Queue)やμOpキュー、Re-Order Bufferなどは、内部を2分割してそれぞれのスレッド別に管理できるようになっている(キュー/バッファーのサイズは一緒)。その一方で、1次キャッシュ(Pentium 4の場合はTrace Cache)やスケジューラー、実行ユニットなどに関しては、2つのスレッドで混在して処理されるようになっている。

 見かけよりはいろいろ細工が多いSMTであるが、見ておわかりのとおり、バッファーそのものが増えている部分はごくわずかだ。大半はスレッド判別用にバッファーの各エントリーを1bit増やしたとか、その1bitでどちらのスレッドを処理しているかを判断するロジックを増やしたといった、細かな作業に費やされている。

 結果として、例えばPentium 4の「Willamette」コア(と恐らくNorthwoodコア)では、「Hyper-Threadingを搭載することでダイサイズが5%増えた」と報告されている。現行の「Nehalem」コアの場合、正確な数字こそ発表されていないが、IDF Fall 2007でパット・ゲルシンガー氏(当時のインテル上級副社長)が、「そもそもSMTはエレガントな設計。リソース・リユースの観点から見ると、4~5%のダイ面積増加で、最高だと30~40%の性能向上がある」と語っており、やはり同程度のダイサイズ増加で実現できるものと見られる。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

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

ピックアップ

ASCII.jp RSS2.0 配信中

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