IA-64には、模範とすべきPA-RISCという実在するプロセッサがあったが、なぜ誕生までに時間がかかったのか。それはまだ見ぬソフトウェア環境の構築に、時間を要したためである。まったく新しい命令体系に基づくプロセッサを設計する場合、最も困難なことの一つが、ソフトウェア実行環境の構築であることに疑いはないだろう。かつてのTK-80のような、0.5KB(512kbytes)程度の実メモリ空間しかなく、既存のソフトウェアを動かすことを前提としていないのならいいが、いきなりの64-bit環境でまったく新しい命令体系、さらには求められるであろうIA-32環境との併存等、ソフトウェアの開発には多大な時間を要する。簡単な実行モニタとコンパイラだけ作ればいいという牧歌的な時代は終わっており、64-bit環境という確実にビジネス仕様以上のものでは、Microsoft社等のOS開発メーカとの共同作業も必要になってくる。もちろん、プロセッサだけでは成立しないのでいわゆるチップセットなども必要になる。既存の上に積み上げていくだけの、x86プロセッサの開発とは次元の異なるものだったのだ。
(そして、VLIWをEPIC(Explicitly Parallel Instruction Computing)に改良する時間もそれなりに要したのは言うまでもない。)
1994年6月に、Intel社とHewlett-Packard社の提携が発表されて2年弱の1996年、Intel社は、開発中の64-bitプロセッサをコードネームMercedとして発表した。当時、Intelプロセッサのコードネームは広く知られていたが、あくまで開発者向けレベルのものであって、公式発表で取り上げられることはないに等しかった。無論、コードネームというものはそういうものである。だが、公式発表として「Merced」は発表されたのであった。要は、それだけIA-64の登場は満を持して行われるもの、として位置づけられたのだろう。互換プロセッサメーカを引き離す最終兵器として、MercedはP6を継ぐ第七世代として準備されつつあるのだ、と喧伝する意味もあったと思われる。
ちょっとここで余談を挟む。ItaniumはP6後継のP7ではなく、P7とMercedはまったく別物だという論調を耳にしたことがあるが、それは1993年頃からIA-64、Merced、Itaniumを眺めていれば、その刻の歴史をわかっていないことに他ならない。それを裏付ける一つの例として、i80486から追加されたCPUID命令のFamilyナンバを確認しよう。
- i80486(Intel486)系:Family 4
- Pentium系:Family 5
- Pentium Pro系:Family 6
- Pentium II系:Family 6
- Pentium III系:Family 6
- Itanium系:Family 7
- Pentium 4系:Family F(10進数表記では15)
- Itanium 2系:Family (F+1)(拡張Familyナンバを加算し、かつ10進数表記では16)
- Pentium M系:Family 6
- Core系:Family 6
- Core 2系:Family 6
- Core i系:Family 6
CPUIDのFamilyナンバは、いわゆるプロセッサのマイクロアーキテクチャの世代を指し、i80486(Intel486)からCPUID命令が追加されたので、Familyナンバは第四世代を表す「4」からスタートしている。こうしてみるとわかるように「6」が最も多いが、これはBaniasことPentium Mが結果的にMobileのみにとどまらず、サーバも含めたすべての領域に派生版が浸透したことによる。これをFamilyナンバ(かつ16進数表記)で分け直すと、
- Family 0x4h = i80486(Intel486)系
- Family 0x5h = Pentium 系
- Family 0x6h = Pentium Pro / Pentium II / Pentium III 系、Pentium M / Core / Core 2 / Core i 系
- Family 0x7h = Itanium(Merced)系
- Family 0xFh = Pentium 4 系
- Family (0xFh+0x1h) = Itanium 2(現行Itanium)系
のように、よりはっきりと確認できる。これらから確認できるように「P7からMerced」というよりは、P7とはマイクロアーキテクチャ(IA-64を実現した)を意味し、それをプロセッサとして形作るコードネームがMercedと言うべきである。もっとも、初代Itanium(Merced)は後に惨憺たる結果となったことから、この汚名を払拭すべくすぐにItanium 2とブランド名を変えられ、さらにマイクロアーキテクチャにも手が入り、CPUIDも変えられてしまう。開発期間を含めれば約8年に及んだ初代Itaniumだが、製品寿命は大変短かったのだが、この話はもう少し後で語ることにしよう。
さて、第七世代として開発が進められたMercedだが、第六世代のPentium ProはRISCプロセッサや互換プロセッサとの競争に晒されていた。特に互換プロセッサは、Cyrix社がAMD社よりも優れたものを多くリリースし、x86命令をそのまま高速に実行するCyrix6x86プロセッサは、当時、登場したばかりの最新OS Windows 95で最高性能を発揮する。Pentium Proは32-bitプログラム実行速度は速かったが、16-bitプログラムはそれほどではなく、16-bitプログラムコードを多数内包し、かつ実行時間も多くを占めていたため、まったく振るわなかったのである。Windows 95が16-bitと32-bitのハイブリッドOSであることは、システム寄りの開発者であれば自明であったが、エンドユーザには「Windows 95は32-bit OS」とMicrosoft社が強力にアピールしていたため、多くの人には「Pentium Proは32-bit OSでの性能が低い」とレッテルを貼られてしまうことになる。この風評により、Pentium Proはエンドユーザからは忌避され、Pentiumの浮動小数点演算エラッタ問題と合わせ、互換プロセッサは市場で大きな勢力を持つことになった。
第六世代の危機は様々なものがあったが、ここでは第七世代の話なので詳しくはふれない。ただ、これが第六世代の性能強化につながり、その予想を上回る性能アップは第七世代、Mercedの開発を厳しいものにしていった。事実、1998年にはMercedの性能は芳しくないというリーク記事が市場に喧しく出るようになり、Mercedの後継プロセッサとなるMcKinley(コードネーム。後の初代Itanium 2)は、マイクロアーキテクチャに手を加えるという禁じ手を繰り出した。VLIWを改良したEPICは、専用コンパイラによる命令群をパック化してプロセッサに流し込む。この前提は、プロセッサ内部のハードウェアを極力簡単な構造にする代わりにコンパイラで事前に命令を最適化させるわけだが、これは内部ハードウェア(マイクロアーキテクチャ)に大きく依存する。これをいきなり二代目で変えてしまおうというのだから、Mercedのハードウェアは第六世代の進化についていけなかった(競合他社にはなおさら)ことがわかるだろう。
また、MercedはIA-64以外の部分ではさらに大きな致命傷を抱えていた。それはIA-32実行効率の低さである。Mercedの設計思想はIA-64命令の実行に最適化されていたが、IA-32命令についてはそれほど重視されていなかった。先にふれたように、第六世代の初代Pentium Proと同じだったのである。しかも、IA-64命令はIA-32命令との互換性がないだけでなく、その実行方法(プロセッサ内部で命令を捌くか、コンパイラによってあらかじめ命令を最適化するか)の違いがあまりに大きすぎ、MercedではIA-32命令を実行するための専用ハードウェアをプロセッサ内部に持つようにした。無論、IA-32命令をMercedで処理することはほとんどないとされていたので、単に実行できるだけの簡易なハードウェアしか用意されず、その性能はPentiumどころか、i486以下であるとも揶揄された。これも後にはIA-32 ELというエミュレーションプログラムが用意されることで、IA-32命令の実行効率はましになったが、いかんせん登場が遅すぎた。
IA-64が現実のものとなっていないときには、IA-32が現実である。これが第六世代よりも大きく劣っているのは致命傷であるが、過渡的な問題ではある。しかし、IA-32と同じような処理をIA-64で行ったとき、これが第六世代より劣っていたなら、過渡的な問題ではなく、永続的な問題となる。Mercedは、このいずれもが劣る結果となって、IA-64への移行を進めようという意欲すらサードパーティに失わせてしまった。開発の遅れは、現実の適用の困難さを増進する。それが、IA-64最初のMercedだったのだ。
今回は後編にするつもりだったが、思った以上に長くなったので中編とした。で、次回に続く。
コメント