デュアルコア インテル Itanium 2プロセッサー9000番台(Montecito)のハイパー・スレッディング技術

2006/9/27 - トピックメーカー/田中伸一

 インテルが2006年7月19日に正式発表した「デュアルコア インテル Itanium 2プロセッサー9000番台」(以下、“Montecito”)には、前世代のシングルコア インテル Itanium 2プロセッサー(以下、Madison)ベースのコアが持つ2つ搭載されている。ただし、表1で示しているように、システム・バスの高帯域化や電力消費効率の向上、インテル バーチャライゼーション・テクノロジー(インテル VT)のサポートなど“デュアルコア化”以外にも多くの機能強化が施されている。また、表には無いがMontecitoのL2キャッシュは、256KBのデータ・キャッシュと1MBの命令キャッシュに分離され、L3キャッシュでは非同期インターフェイスを採用するなど、キャッシュ階層の強化も図られている。そこで今回はそうした新機能の中から“ハイパー・スレッディング”に注目してみた。

  Montecito Madison
システム・バス帯域幅(最大) 8.53 GB/s 6.4 GB/s
システム・バス・クロック(最大) 533 MHz 400 MHz
L3キャッシュ・サイズ(最大) 24 MB(12MB×2) 9 MB
TDP(1.60GHz版での最大値) 75 W 122 W
コア数 2 1
 
ハイパー・スレッディング・テクノロジー ×
インテル バーチャライゼーション・テクノロジー ×
インテル キャッシュ・セーフ・テクノロジー ×
プロセッサー・ロックステップ ×

表1)
MontecitoとMadisonの主な違い

 これまで登場したHTテクノロジー対応IA-32プロセッサーでも、今回のMontecitoでも、コアにつき2つの論理プロセッサー*1が、一つの物理リソース(キャッシュや実行ユニットなど)を共有利用するという点では同じである。しかし、インテルが公開している資料を調べていくうちに、物理リソースの「共有の仕方」において、両者は全く異なることがわかってきた(※以降、区別のためにIA-32系プロセッサーで使われている技術を“HTテクノロジー”、Montecitoを示す場合を“ハイパー・スレッディング”と表記する)。詳細は以降で記すが、優れたOOO(Out-of-Order)実行エンジンを持つIA-32系はプロセッサー主体で命令の並列性を検出する一方、EPICアーキテクチャーを採用するインテル Itanium プロセッサー・ファミリーはコンパイラーが主体となる。HTテクノロジー(IA-32系)とハイパー・スレッディング(Itanium系)の違いは、そういうところに起因している。

1)
論理プロセッサーとは、AS(Architecture State、あるいはArchitectural State)と呼ばれる「プロセッサーの論理的な状態」を記憶・制御するためのレジスター類(汎用レジスターや制御レジスター、命令ポインター、APICレジスターなど)の完全なセット。HTテクノロジーをサポートしないIA-32プロセッサーの場合、1つのコアが持つASは1つだが、HTテクノロジー対応IA-32プロセッサーには、コアにつき2つのASが存在する。

IA-32系プロセッサーのHTテクノロジー

 では、Montecitoのハイパー・スレッディングの話に入る前に、準備としてIA-32系プロセッサーのHTテクノロジーを見ていくことにしよう。一つのプロセッサーで複数スレッドの並列処理を行うというアイデア自体は新しいものではなく、実際、数十年前から今日に至るまで様々なコンセプト・モデルが考え出されている。“SMT(Simultaneous Multithreading) ”もそうした中の一つで、これを量産プロセッサーとしては、はじめて具現化したのがHTテクノロジーである。HTテクノロジーでは、2つの論理プロセッサーが、(システムの電源投入直後から)あたかも独立した物理プロセッサーであるように振舞う。もちろんOSが認識するプロセッサー数も論理プロセッサー単位となる。ただし、論理プロセッサー(AS)数と、その‘実体’である実行パイプラインが‘2対1’の関係となること、そして2つの論理プロセッサーが共通のパイプラインを同時に使うという点が、HTテクノロジー登場以前のIA-32プロセッサーと異なる。そのため、一般のMP(Multiprocessing)システムと同様、OpenMP API(Application Programming Interface)やインテル・コンパイラーの自動並列化機能などを使い、各論理プロセッサーで個別のスレッドを処理するようにスケジューリングしておけば、2つのスレッド処理を――パイプライン上でオーバーラップするような形で――「同時に(Simultaneously)」進めることができる。このような芸当ができるのは、命令の並列性を検出し、最適な順番に並べ替えて実行(Out-of-Order実行)する仕組みを内部に持つIA-32系ならではと言える。

 一方でHTテクノロジーには、特にパイプラインのフロント・エンドにおいて「論理プロセッサーあたりの物理リソース」が少なくなるという側面もある。2002年2月14日発行の“Intel Technology Journal Volume 06 Issue 01”(資料番号 : ISSN 1535766X)によると、(Intel NetBurst マイクロアーキテクチャーの場合)スレッドを構成する個々のソフトウェア命令は、パイプラインのフロント・エンド(実行トレース・キャッシュ*2やデコーダー*3など)で1つ以上のμOP(マイクロ命令)に変換後“μOPキュー”に登録され、“アロケーター*4”や“レジスター・リネーム*5”といったロジックを経て、後半の“μOPスケジューリング*6”や“実行ユニット”に渡される。HTテクノロジーがアクティブになっている場合、各論理プロセッサーの独立性を維持するために、μOPキューや、アロケーターが各μOPの処理のために割り当てるバッファ類(物理レジスターやリオーダー・バッファ、ロード/ストアー・バッファなど)へのエントリー数は、論理プロセッサー分だけパーティショニング(分割)される。つまり、論理プロセッサーが利用できる物理リソースは部分的に半分になるわけだが、こうした工夫により、一方の論理プロセッサーが何らかの原因でストールしても、他方がそれに影響されること無く処理を継続することが可能となる。

2)
実行トレース・キャッシュ・・・デコーダーの負荷を低減するために、一度デコードされたμOP(マイクロ命令)を、次回必要になったときのために格納しておくためのキャッシュ。
3)
デコーダー・・・IA-32命令を実行パイプラインで処理可能なμOP(マイクロ命令)に変換するためのロジック回路。
4)
アロケーター・・・μOPの順番の並べ替え(リオーダー)や処理の追跡(トレース)を行うために必要なバッファ(小規模メモリー)の割り当てを行う回路。
5)
レジスター・リネーム・・・プログラムで使われているIA-32論理レジスター(EAX, ECXなど)を、プロセッサーが持つ128本の物理レジスターに対応付けること。
6)
μOPスケジューリング・・・μOPの依存関係やリソースの使用状況などから、実行可能なμOPを判定し、実行ユニットに発行すること。

CMP (Chip Multiprocessing)

 一方、上で触れた「論理プロセッサーあたりの物理リソース」という点で分があるのが“CMP(Chip Multiprocessing)”である。インテルが“デュアルコア”、“マルチコア”と呼んでいる技術は、一般にCMPとして知られており、文字通りチップ上に複数のコアを実装する。そのため(当然の結果として)1つの論理プロセッサー、つまりASが丸々1つの物理リソースを占有できる。これには、従来アーキテクチャーのインテル Pentium Dプロセッサー(Presler)や、インテル Core マイクロアーキテクチャーを採用したデュアルコア インテル Xeon プロセッサー5100番台(Woodcrest)、クライアントPC向けのインテル Core 2 Duoプロセッサー(Conroe、Merom)が相当する。また来年にはサーバー向け“Clovertown”やデスクトップ向け“Kentsfield”をはじめとするクアッドコア・プロセッサーの登場が予定されており、「マルチコア化をベースとした並列処理性能の向上」を基本路線とした戦略がしばらく続くことは間違いないだろう。

Montecitoのハイパー・スレッディング

 Montecitoもコアにつき2つの論理プロセッサーを持つが、これらはHTテクノロジーのように1つの物理リソースを「同時に」ではなく、「排他的に」利用する。つまり、ある時期は一方の論理プロセッサーが物理リソースを占有し、ある特定のタイミングで他方に使用権をスイッチするというアプローチを採用している。一般に、時間ベースで処理スレッドを切り替える手法を“Time-Slice Multi-threading”、イベント・ベースで切り替える手法は“Switch-on-Event Multi-threading(SOEMT)”と呼ばれているが、Montecitoのハイパー・スレッディングに採用されている“Temporal Multi-threading(TMT)”は、SOEMTの部類に入る。

 既に知られている通りMontecitoをはじめとするインテル Itanium 2プロセッサー・ファミリーは、EPIC(命令的並列命令コンピューティング)ベースで設計されている。EPICでは、命令の並列性を検出し、処理に最適な順番にレイアウトする役割はプロセッサーではなく、コンパイラーが担っている。また、分岐先やキャッシュ階層におけるデータの所在を知るための‘ヒント’もコンパイラーからプロセッサーに指示される。そのためプロセッサーは、自分が持つリソースを純粋に命令実行のために使うことができる。

 こうしたEPICの特性を活かしながらスレッドの並列処理を実現するために採用されたのがTMTである。TMTでは、物理リソースの利用効率を高め、パフォーマンスを向上させる上で効果的なイベントが選ばれている。その「効果的なイベント」とは次の5つ。

  1. L3キャッシュのミス・ヒット
  2. L3キャッシュにメイン・メモリーからデータが帰ってきたとき
  3. タイム・アウト
  4. 処理スレッドの切り替えを支持する命令を実行したとき
  5. 低電力モード(Low-power mode)

 イベントの候補として最も有力なのが「キャッシュ・ミス」だが、Montecitoのキャッシュ・レイテンシーはL3キャッシュでも14サイクルと短い。一方で、Montecitoのハイパー・スレッディングは、スレッドの切り替えを行うとき、パイプラインを初期化(フラッシュ)する必要があり、その際15クロック・サイクルが必要となる。従って、L1やL2キャッシュ・ミス程度のイベントで処理スレッドの切り替えを行えば、かえってパフォーマンスが悪化してしまうことになる。一方、L3キャッシュ・ミスの場合、必要なデータをメイン・メモリーに要求してから返ってくるまで、コアは長い時間待たされることになる。これがまさしく別スレッドの処理には絶好のタイミング(上記1と2)となる。また、ハイパー・スレッディングでは、一つのスレッド処理にあまり長い時間、物理リソースを占有させないようにしている(上記3)し、ソフトウェア命令(hint@pause命令)で処理スレッドの切り替えを指示できるようにもなっている(上記4)。更に、処理中のスレッドが低電力モードに移行した際にも、処理スレッドの切り替えが行われる(上記5)

 EPICアーキテクチャーは、コンパイラーで理想的なコードを生成するため一見すると、マルチスレッディングの機能が入る余地は無いように思えてしまう。しかし、上で見てきたように「L3キャッシュ・ミス」のようなイベントが起きるタイミングをうまく利用することで、Montecitoはコアにつき2スレッド、プロセッサー全体では4つのスレッドを同時に処理できる。冒頭でも触れたが、MadisonからMontecitoへの進化には、単純なデュアルコア化に留まらない奥深さがあることに今回は改めて気付かされた。

 Montecitoのハイパースレッディングに関する詳しい内容は、“Dual-Core Update to the Intel Itanium 2 Processor Reference Manual For Software Development and Optimization”(資料番号 : 308065-001)に記載されているので、興味のある方は、一度目を通されることをお勧めする。

【参考文献】
Intel Technology Journal Volume 06 Issue 01 Published February 14, 2002
・Dual-Core Update to the Intel® Itanium® 2 Processor Reference Manual For Software Development and Optimization (資料番号 : 308065-001)

記事アーカイブ

IT Manager's Desk の記事をテーマごとにまとめ読み。

  • IAストラテジー
    • IAとビジネスの新しい展望を解説します
  • IAサーバー
    • IAサーバーの最新動向をレポートします
  • ビジネスPC
    • ビジネスとITの現場を変える最新PCソリューションをお伝えします
  • 事例ウォッチ
    • IAを活用してビジネスを切り拓く、注目の導入事例をピックアップします


新着ビジネスPC