インテルが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 |
| ハイパー・スレッディング・テクノロジー | ○ | × |
| インテル バーチャライゼーション・テクノロジー | ○ | × |
| インテル キャッシュ・セーフ・テクノロジー | ○ | × |
| プロセッサー・ロックステップ | ○ | × |
では、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の処理のために割り当てるバッファ類(物理レジスターやリオーダー・バッファ、ロード/ストアー・バッファなど)へのエントリー数は、論理プロセッサー分だけパーティショニング(分割)される。つまり、論理プロセッサーが利用できる物理リソースは部分的に半分になるわけだが、こうした工夫により、一方の論理プロセッサーが何らかの原因でストールしても、他方がそれに影響されること無く処理を継続することが可能となる。
一方、上で触れた「論理プロセッサーあたりの物理リソース」という点で分があるのが“CMP(Chip Multiprocessing)”である。インテルが“デュアルコア”、“マルチコア”と呼んでいる技術は、一般にCMPとして知られており、文字通りチップ上に複数のコアを実装する。そのため(当然の結果として)1つの論理プロセッサー、つまりASが丸々1つの物理リソースを占有できる。これには、従来アーキテクチャーのインテル Pentium Dプロセッサー(Presler)や、インテル Core マイクロアーキテクチャーを採用したデュアルコア インテル Xeon プロセッサー5100番台(Woodcrest)、クライアントPC向けのインテル Core 2 Duoプロセッサー(Conroe、Merom)が相当する。また来年にはサーバー向け“Clovertown”やデスクトップ向け“Kentsfield”をはじめとするクアッドコア・プロセッサーの登場が予定されており、「マルチコア化をベースとした並列処理性能の向上」を基本路線とした戦略がしばらく続くことは間違いないだろう。
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つ。
イベントの候補として最も有力なのが「キャッシュ・ミス」だが、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)
日本アイ・ビー・エム IBM System x3250 2011/11/17 UP
東芝 MAGNIA3615R 2010/11/18 UP
日本アイ・ビー・エム IBM System x3200 2010/11/17 UP
日本ストラタステクノロジー ftServer 6310 2010/11/17 UP
日本ヒューレット・パッカード HP ProLiant ML110 G6 2010/11/15 UP
東芝 Satellite B550/B 2011/01/27 UP
東芝 dynabook R730/B 2011/01/27 UP
東芝 Satellite B650/B 2011/01/27 UP
デル Dell Vostro 3400 2010/04/02 UP
デル Dell Vostro 3500 2010/04/02 UP