後藤弘茂のWeekly海外ニュース

20年後の今も至る所で生き残っているPentiumアーキテクチャ

Intel CPUの歴史を塗り替えたPentium

 Intelの「Pentium(P5)」プロセッサが登場してから、今年(2014年)で20周年となる。正式発表されたのは1993年で、普及版が登場したのは1994年だ。Pentiumは発表当時、CPU業界に大きなインパクトを与えた。技術の流れを変えたからだ。Intelにとって転換点となっただけでなく、CPUの歴史を塗り替えたと言ってもいい。

初代Pentium(P5)のダイ
PDF版はこちら

 その当時は、Intelのx86に代表される「CISC(Complex Instruction Set Computer:複雑命令セットコンピュータ)」系の命令セットアーキテクチャ(ISA:Instruction Set Architecture)と、MIPSやPowerPCなどの「RISC(Reduced Instruction Set Computer:縮小命令セットコンピューター)」系ISAの間の論争があった。簡単に言えば、CISCは高速化が難しいため、RISCに取って代わられるというものだった。今ではばかばかしく思えるが、当時は、CISC系CPUでは、IPC(Instruction-per-Clock)は1または1以上にできない、つまり、1クロックに平均1命令の実行はできないと言われていた。そのため、パフォーマンスを上げる余地の大きいRISC系CPUでPCを作るという構想が持ち上がり、MicrosoftもWindows NTをRISCに積極的に乗せた。

 しかし、IntelはPentiumで、RISCの代表的な高速化手法の1つであるスーパースカラを採用。1クロックに最大2命令を実行できるようにして、CISC命令セットのCPUでも、ハードウェアで高速化できることを実証した。Pentiumの成功が、その後の続く、スーパースカラ&スーパーパイプラインのPentium Pro(P6)やPentium 4(Willamette:ウイラメット)への道を開いた。その背後で、RISC系CPUでWindows PCを作ろうという構想は、後退して行った。今では、最高パフォーマンスのクライアントCPUはx86系だが、その流れを作ったのはPentiumだった。

 Pentiumは、IntelのCPU開発態勢も確立した。2年に1度、ロジックプロセス技術を微細化し、2年毎に新しいCPUアーキテクチャを導入する。IntelのこのCPU戦略が始まったのはPentiumからで、それ以前は4年に1度のアーキテクチャ更新だった。迅速な開発のため、IntelはPentiumから、内部的な設計態勢を変えて、迅速な設計が可能となるCADツールなども整えた。

 Pentium(P5)は、さらにショートベクタ演算技術のMMXを搭載した「Pentium MMX(Pentium Processor with MMX Technology)」へと派生。組み込み版も作られた。それだけではなく、Pentiumの基礎設計は、その後のIntelの様々なCPUにも使われている。プロジェクトが中止になったGPU対抗のメニイコアCPU「Larrabee(ララビ)」と、その後継の「Xeon Phi」シリーズは、最新のKnights Landing以外はPentiumコアを使っていた。Intelの研究CPUプロジェクトでも、Pentium系CPUコアは何度ともなく使われてきた。

 Pentiumは、また、非常にパフォーマンス/電力効率の高いCPUコアでもある。Pentium Pro以降のCPUコアは、CPU命令の順次を入れ替えて実行するアウトオブオーダー(Out-of-Order)実行を採用したため、IPCは高くなったものの、電力当たりの性能効率は落ちた。それに対して、シンプルに命令を順番に実行するインオーダー(In-Order)実行スタイルであるため、原理的には効率が高い。そのため、電力効率が重視され、組み込みへの対応が重要となった20年後の今も、Pentium系のCPUコア設計は再び見直されている。

486からアーキテクチャを大きく発展させたPentium

 Intelは4004で世界初のマイクロコンピュータを発表して以来、MPU(CPU)を進化させて来た。16-bitの8086は広く採用されPC時代の基礎を築いた。その後は「80286(286)」を経て、「386(80386)」ではx86命令を32-bitに拡張した。386は命令フェッチ(取り込み)→命令デコード→命令実行のシンプルな3ステージパイプライン構成だった。

 続く486系は、386をベースに徹底して高速化を図った。パイプラインステージを5段に深めて高クロック化を容易にした。浮動小数点演算(FP)ユニットを加え、命令とデータのためのキャッシュを搭載した。486ではシンプルな命令では1クロックに1命令のスループットで実行することができた。

386からPentium MMX(P55C)までのアーキテクチャの移行
PDF版はこちら

 Pentiumはその486からさらに高速化を狙って設計された。主眼は、まず、整数演算実行パイプを2本にして、最大2命令を同時に実行できるようにしたこと。そのために、命令デコーダも2-wayで2命令を同時デコードできるようにした。486までは、1サイクルに最大1命令デコードで最大1命令実行だった。また、486では統合されていたキャッシュは命令とデータに分離。条件分岐によってパイプライン実行が乱れるのを防ぐために分岐予測機構も搭載した。FPユニットもパイプライン化して1命令1サイクルのスループットで実行できるようにした。

 もう少し詳しく見ると、Pentium(P5)は8KBのL1命令キャッシュを備え、分岐予測では分岐状態と分岐先のアドレスをキャッシュする「Branch Target Buffer(BTB)」を備える。条件分岐命令があると、その命令の後に続く命令フローは、分岐が確定するまで待たなければならなくなる。分岐予測は、分岐が成立するかしないかを予測し、分岐した場合の飛び先のアドレスを予測することで、条件分岐命令に続く命令を投機的に実行できるようにする機構だ。Pentiumでは、パイプラインが386時代より深くなり2命令実行となったため、条件分岐によるロスが大きくなった。分岐予測はそれをカバーするために実装された。

初代Pentium(P5)のマイクロアーキテクチャ
PDF版はこちら

x86 CPUでは初めての2パイプラインの整数演算ユニット

 Pentiumはインオーダー実行CPUであるため、2命令実行と言っても、連続する2つの命令しか同時に実行できない。また、実行できる命令の組み合わせには制約がある。依存性のない「単純」命令のみがペアで実行可能となっている。単純命令はレジスタ間演算や、メモリからのデータのロード/ストアなど。演算とメモリアクセスが複合した命令はペアで実行できない。また、先の命令がジャンプ命令だった場合も、次の命令は同時には実行できない。また、2つ目の命令が1つ目の命令が書き換えるレジスタを参照または書き換える場合などもペアで実行できない。

Pentium(P5)では2パイプで並列実行をするため486よりもクロック当たりの性能が高くなる
PDF版はこちら

 実行パイプラインは、「Uパイプライン」と「Vパイプライン」の2本。1本目のUパイプが全ての命令を実行できるメインパイプであるのに対して、2本目のVパイプは単純命令しか実行できないサブパイプだ。UパイプとVパイプは、同期してペアになった命令を逐次実行する。実行ユニットもハードワイヤド化が進み、スループットが高くなった。

 浮動小数点演算(FP)ユニットは、加算、乗算、除算のユニット群で、パイプライン化されている。実際には、FPユニットも2パイプを備えているが、2つ目のパイプは「FXCH (floating-point exchange)」命令しか実行できない。つまり、FP命令を実行するにあたり、レジスタスタックのトップしか実行できないというx87 FPレジスタの制約を回避するためのFXCH命令を補助に実行するだけのパイプだ。そのため、図中では省いてある。また、FP命令は、整数演算ともペアでは実行できない。

 ちなみに、初代Pentium(P5)のFPユニットの除算ユニットが、後に論議をかもすことになる有名な「Pentium除算バグ(Pentium FDIV Bug)」を持っていた。IntelはこのバグのためにPentiumの交換を受け付けることになり膨大な出費を被るが、その結果、Intel社内でのCPU設計の検証システムが急激に進歩した。

 PentiumからはL1キャッシュが命令とデータに分離され、データ専用キャッシュとして8KBが搭載された。また、CPUコア外部とのデータバスは従来の32-bit幅から64-bit幅へと拡張された。パイプラインの構造は5ステージで、今となっては最低の段数だが、当時は標準的なパイプライン段数だった。

386からPentium(P5)までのパイプラインの変化
PDF版はこちら

Intel CPU開発の大きなマイルストーン

 こうした要素を盛り込んだため、Pentium(P5)は前世代の486より格段にトランジスタ数の多いCPUとなった。486DXが1.2M(120万)トランジスタだったのに対して、Pentium(P5)は3.1M(310万)と2倍以上に増えた。275K(275,000)だった386と比べると11倍のトランジスタ数だ。

トランジスタ数の違いをCPUの大きさで示したチャート
PDF版はこちら

 プロセス技術は0.8μm、今の単位に直すと800nm。しかし、すぐに0.6μm(600nm)に微細化した2代目のPentium(P54C)が登場する。一般のPCユーザーにとっては、1994年のPentium(P54C)からが本格的なPentium普及期となる。動作周波数も100〜120MHzに上がり、100MHzに到達していた486DX4を超えた。そして、最終的に0.35μm(350nm)に縮小したPentium(P54CS)が登場する。ちなみに、当時のIntelのコードネームはアルファベットと数字で、P54Cなら、5がアーキテクチャ世代、4が実装、Cが縮小(Compaction)を示していた。

 膨大なトランジスタ数を収めるためにPentium(P5)では、ダイサイズも大きくなった。初代の0.8μm版のダイは294平方mmと、当時としては巨大サイズ。0.6μmのP54Cで163平方mmと当時のパフォーマンスPC向けCPUのサイズに、0.35μmのP54CSで、メインストリーム向けCPUの90平方mmに縮小した。そのため、市場も、当初はサーバー&ワークステーションだったのが、パフォーマンスPC、メインストリームPCへと徐々に広がって行った。

ダイサイズ移行図
PDF版はこちら

 Intel CPU全体のトランジスタ数の移行を見ると、一見、順調に2年で2倍程度にトランジスタ数が増加して来たように見える。しかし、実際にはIntelのロジックプロセスの微細化や多層化は、初期にはゆっくりで、Pentium(P5)の0.8μm(800nm)当たりから急加速されていることが分かる。8086から486までは、CPUのダイサイズを大きくすることでトランジスタを増やした側面があった。

 また、CPUアーキテクチャ開発もPentium(P5)から急加速して、それまでの4年に1マイクロアーキテクチャのペースから、2年に1マイクロアーキテクチャの導入へと変わっている。つまり、Pentium(P5)を契機に、IntelのロジックプロセスとCPUマイクロアーキテクチャ開発は倍速化した。

CPUのトランジスタ数の推移
PDF版はこちら

 さらに、IntelはPentium(P5)の派生のPentium MMXからは命令セットアーキテクチャも大幅に拡張した。それまでは、16-bitから32-bitへとビット拡張は行なわれたが、命令セットの基本は変わっていなかった。異なる種類の命令の導入というアーキテクチャ面での拡張が始まったのも広義のPentiumの世代からだ。こうして見ると、PentiumがIntelのCPU開発の歴史で、大きなマイルストーンだったことが分かる。

RISCに対するIntelからの回答

 IntelがPentiumからCPU開発にリソースを集中するようになったのは、激しい競争にさらされていたからだ。Pentiumが登場した当時、IntelはRISC攻勢の嵐に見舞われていた。CISC系命令セットは、そのルーツの歴史が古く、ハンドコーディングに最適化されており、人間がプログラムしやすいように複雑な命令を持つ。命令長が可変で多様で、演算命令のオペランドにメモリを指定できる。こうしたCISCは命令セットが複雑で、命令実行も複雑となるため、高速化のためのハードウェア技術やコンパイラ技術の適用が難しいとされていた。

 それに対して、RISC系命令セットは始めからコンパイラに最適化されて定義されており、固定命令長で固定命令フォーマット。演算のオペランドはレジスタに限定され、メモリアクセスはロード/ストア命令で行なう。そのため、命令体系はシンプルで、命令実行もメモリ命令と演算命令が分離されているため簡素で、そのため高速化のためのハードウェアやコンパイラ技術を採用しやすい。

 こうした命令セットの議論からRISC CPUベースのパーソナルコンピュータを作ろうという機運が高まり、MIPSやPowerPCをベースにしたPCのプランが立ち上がった。CISCは命令セットとしてもはや終焉の時を迎え、これからはRISC命令セットの時代だという風潮だった。

 しかし、Pentiumの登場は、そうした議論に、ほぼ終止符を打った。なぜなら、CISC命令でも高速化ハードウェア技術の適用が可能だと証明したからだ。CISC系ISAのx86 CPUに、まだまだ先があることを示し、RISCへの切り替えの勢いを失わせた。その結果、RISC系のハイパフォーマンスクライアントCPUの開発は先細りになって行き、IA(x86系)系CPUの独擅場となって行く。AppleがCISCのモトローラMC680x0系からRISCのPowerPCに移行したものの、再びCISCのIntel CPUに戻ってきたのがいい例だ。

20年後の今も至る所に生き残るPentiumアーキテクチャ

 Intelは97年にはPentium(P5)アーキテクチャに、MMX命令を加えたPentium MMX(P55C)を加える。Pentium MMX(P55C)ではMMXパイプを新たに加えただけでなく、分岐予測の大幅な強化やキャッシュの倍増、命令キューの追加、パイプラインの見直しとパイプラインの6ステージ化も行なった。言ってみれば強化版のPentiumだ。

Pentium MMX(P55C)と初代Pentium(P5)のブロック図
PDF版はこちら
Pentium MMX(P55C)のパイプライン構造
PDF版はこちら

 Pentiumマイクロアーキテクチャは、今でも至る所で目にする。冒頭で触れたLarrabeeや従来のXeon Phiなどのメニイコア製品やプロジェクトはもちろん、Intelのメニイコア研究チップやNear-Threshold Voltage(近しきい電圧)技術の試作チップなど、Intelの研究現場でCPUコアの試験のために使われるCPUコアのほとんどはPentium系だ。20年経っても、まだPentiumは生きている。

Near-Threshold Voltage技術の試作チップ「Claremont」のP54Cコア
48コアの研究メニイコアチップに使われたP54Cコア

 Pentiumコアが多用される理由は、Pentiumが小さく実装しやすいというだけでなく、Pentiumが今となっては非常にバランスのいいマイクロアーキテクチャだからだ。現在は電力効率が最大の課題で、電力効率の高いCPUコアがよしとされる。特に、数十個のCPUコアを乗せるメニイコアでは電力効率はクリティカルだ。また、消費電力を限界にまで下げるNear-Threshold Voltageのようなモバイル向けの技術でも、CPUコア自体の電力効率が重要となる。

インオーダー実行でスーパースカラのPentiumは電力効率も高く、絶対性能もそこそこの位置にある

 そして、電力効率はCPUを複雑にすればするほど落ちる。Intel自身の研究でも、アウト・オブ・オーダー実行やディープパイプラインにすると、電力効率がガクっと落ちることが示されている。しかし、電力効率を上げようとすると、絶対性能が落ちてしまう。その意味で、Pentiumはうまいバランスを取ったアーキテクチャとなっている。そのため、Pentiumそのものではなくても、その派生CPUコアは、これからも各所で使われて行くだろう。IntelのCPUコアの中で、もっとも長寿なコア、それがPentiumだ。

(後藤 弘茂 (Hiroshige Goto) E-mail