今回は,ItaniumファミリのアーキテクチャであるEPIC(Explicit Parallel Instruction Computing)の概要について解説し,Itaniumファミリの将来について述べ,このシリーズの最終回としたい。

◆並列処理の明示的コントロール

 EPICの最大の特徴は“explict”(明示的な)という言葉に表れている。つまり,コンパイラがプログラム中の並列性を検出し,ハードウエアに対して並列実行可能な命令群を「明示的に」教えられるような命令セットになっているということである。Itanium 2の場合では,最大6個の整数演算命令と2個の浮動小数点命令を同時並行的に実行可能である。

 これは,プログラムの中に「暗黙的に」存在する並列性をハードウエアが実行時に検出する従来型RISC(スーパースカラー)とは対照的である。イメージ的にはハードウエアが自動的に並列性を検出した方が先進的であるように思えるかもしれないが,性能向上という点から言えば,コンパイラの最適化に頼った方が有利な点が多い。

 第1に,前回も述べたように,コンパイラによる最適化は実行のたびに行う必要がなく,実行前に一度だけ行っておけばよい。

 第2に,コンパイラはプログラム全体を見た上で最適化できる。その一方で,ハードウエアではパイプラインで先読みしている少数の命令しか把握できず,局所的な最適化しかできない。

 第3に,ハードウエアでの並列化は,ハードウエア・ロジックの複雑性を増し,クロック周波数向上を難しくする。並列度を1つ上げるだけでも,命令の依存関係をチェックするためのロジックの複雑性が指数関数的に増大してしまうのである。

◆VLIWの問題点

 明示的な並列性を生かす考え方は,前回述べたVLIWアーキテクチャに近いものである。しかし,元々のVLIWアーキテクチャでは商用のプロセサとして使用するにはいくつかの問題があった。最大の問題点はプロセサの内部アーキテクチャ(例えば,いくつの命令を同時並行的に処理可能か)が命令セットの仕様に明示的に表れてしまう点である。

 単純に効率性だけを追求する研究用プロセサであれば良いかもしれないが,商用プロセサではこれは許されない。プロセサが改良されて内部アーキテクチャが変わると命令セットの仕様に影響が出る,つまり,プロセサ・ファミリ間での互換性を維持することができないからである。要するに「明示的過ぎる」わけである。

 Itaniumファミリではこの点では現実的な妥協をし,ワン・クッション置いている。つまり,コンパイラはいくつの命令が実行可能であるかを命令中にヒントとして残し,ハードウエアはこのヒントを参照することで,実装が許す限り並列的に命令を実行するのである。これにより,将来的に実行ユニットの数が多い(並列性をアップした)プロセサが登場しても再コンパイルなしに同じバイナリを実行できる。

◆その他の性能向上機能

 Itaniumファミリでは上記以外にも多くの性能向上のためのかなりドラスティックな仕組みを採用している。これらの機能の一部はRISCプロセサでも実装していたが,Itaniumファミリではより徹底した実装が行われている。

レジスター・ファイル: Itaniumファミリは整数演算と浮動小数点演算用のそれぞれに128個という多数のレジスタを有している。整数演算レジスタは,あたかも超高速のスタック・メモリのように使用することができる。

メモリー階層の明示的制御:従来型のプロセサでは,LRU(Least-Recently-Used)などのアルゴリズムを使ってキャッシュにどのデータを置くかをハードウエアで自動的に制御している。つまり,キャッシュはプログラムからは見えない存在である。Itaniumファミリでは,ここで,コンパイラがどのデータをキャッシュに置くかを「明示的に」制御させることで性能向上を可能としている。前述のとおり,コンパイラはプログラム全体を大局的に見ることができるので,どのデータをキャッシュにキープしておけば有利かを判断できる。

プレディケーション前回述べたように,条件分岐命令は,パイプラインに空きを作り,性能向上の大きな障害となる。Itaniumファミリでは,条件分岐があった場合には,その両方を同時に実行し,選ばれなかった道の計算結果を破棄するという投機的な実行方式がとられている。

データ・スペキュレーション:メモリーからのデータ・ロードがある場合,Itaniumファミリでは命令の実行に先駆けてデータを先にロードしてしまう(つまり,データのロードと使用のタイミングを分けている)。もちろん,単純に先読みするだけだと,その後,そのデータが更新され,先読みしたデータと食い違ってしまう可能性がある。その場合にはデータが無効であることを検出し,再ロードするための安全弁的機能が用意されている。

 ここまで見ると,Itaniumファミリは過去との命令セット・レベルでの互換性を思い切って捨て,1990年以降(つまりRISC登場以降)に出現した様々な性能向上のためのアーキテクチャの工夫を盛りだくさんに詰め込んだマイクロプロセサであると言える(唯一の例外はハイパースレッディングであろう)。RISCとVLIWの良いとこ取りをしたと見ることもできる。

 重要な点はメモリー・アクセスの遅延の影響をできるだけ受けないようにしている点,そして,可能な限り,最適化機能をコンパイラに移すことで,ハードウエアの必要以上の複雑化を避けようとしている点である。

◆互換性という課題

 言うまでもなく,ビジネスの世界でプロセサを成功させるためには性能が高いだけでは十分ではなく,過去の資産との互換性維持が重要である。ItaniumファミリはIA-32の後継であるとともに,米Hewlett-Packard(HP)のRISCプロセサであるPA-RISCの後継でもあり,両者とのバイナリ互換性を維持するという困難な課題があった。

 HP社はソフトウエアによる実行時のコード・トランスレーションで,PA-RISCとの互換性を維持する方法をとった。単なる解釈実行によるエミュレーションではなく,実行時にコードを動的に変換していく方法なので,オーバーヘッドは比較的小さい(前回述べたCrusoeチップにおけるIA-32命令の実行方式に近い)。

 米Intelとしては,IA-32との互換性をソフトウエアではなくハードウエアで維持したいという目標があったのであろう。Itanium中にはIA-32のバイナリを実行するハードウエアが含まれている。レジスタなどのリソースをうまく共有することでIA-32のロジック部分がチップ上に占める面積は比較的小さく抑えられているのだが,残念なことにItanium上でのIA-32バイナリ実行の性能は芳しくない。これは,Intel社にとって最大の誤算であっただろう。Intel社もIA-32 Execution Layerと呼ばれているソフトウエア・トランスレーションによるIA-32とのバイナリ互換維持方式を検討中のようである。これにより,同クロックのPentium Xeonと同程度の性能が達成可能とされている。

◆チャンスを得たAMD

 Itaniumファミリが,IA-32との互換性という点で問題を抱えている一方で,現在チャンスを得ているのが米AMDである。AMD社は,自社の64ビット・プロセサであるOpteronにおいて,IA-32のアドレスを64ビットに拡張し,いくつかのレジスタを追加するだけという単純な方法で64ビット化を行った。これにより,従来のIA-32向けのバイナリも性能のペナルティなしで稼働できる。例えば,64ビットのOSの下で32ビット・アプリケーションを稼働する(Windows Terminal Serviceなどでは特にこの構成が生きてくる)などの用途も可能になっている。

◆RISCの進化も止まったわけではない

 EPICアーキテクチャの長期的な有効性は確かだとしても,それがマイクロプロセサの進化の唯一の方向性というわけではない。上記のAMD社の例にもあるように,あまり難しいことを考えず,キャッシュの拡大とクロック周波数の向上などによる力技アプローチが当面は有利であるかもしれない。

 VLSIの集積度向上を利用して,1つのチップ上に複数のプロセサを置くマルチコアという手法も有利だろう。プロセサ間のやり取りをチップの外に信号を出さないため,遅延を小さくでき,性能上の貢献度が大きい。

 例えば,米Sun Microsystemsは,SPARCに対してプロセサ・アーキテクチャそのものは単純に抑え,マルチコアと前回述べたチップレベル・マルチスレッディングでより大局的な並列性を追及することで性能を向上しようとしている。このような戦術も,少なくとも短期的にはItaniumファミリと充分互角に戦える可能性がある(なお,Itaniumファミリにおいても,2005年ころにはマルチコアとハイパースレッディングがサポートされる計画である)。

◆市場動向

 ガートナーの市場予測では,Itaniumファミリの普及は堅調に進んでいくものの,短期的にはIA-32や従来型RISCを凌駕(りょうが)するには至らない。2007年時点におけるItaniumプロセサを搭載したサーバーの総売り上げを40億ドルと予測しているが,同年におけるIA-32搭載サーバーの予測値は190億ドル,RISC搭載サーバーの予測値は150億ドルである。やはりソフトウエアの後方互換性を実質的に欠く点,そして,(AMD社を含む)IA-32やRISCも進化が止まっているわけではないという点が大きな障害となっている。

 しかし,EPICは長期的なテクノロジ動向を見据えて20年間有効性を維持することを目標としたアーキテクチャである。Itaniumファミリの性能と市場への浸透度は,Intel社とHP社が当初期待したほど革命的ではなかったかもしれない。しかし,長期的に見ればItaniumファミリが勝利者(少なくとも勝利者の1つ)となる可能性は明らかに高いと考える。

◇     ◇     ◇

 さて,次回からはまったく方向性を変えて,ガートナーが考えるエンタープライズ・アーキテクチャについて述べていくこととしたい。