今年もISSCCでは、様々なマイクロプロセッサの技術発表がある。中でも注目しているのが、超低消費電力IA-32マイクロプロセッサであるコードネームSilverthorneだ。今回、技術発表ということで、期待されるのはいかなるマイクロアーキテクチャを採用し、いかに超低消費電力を実現したかというところだが、発表される前に勝手な予想をしてみようと思う。おそらく、24時間後には「嗚呼、アホなことを書いてしまった」と思うだろうが、既にSilverthorneについては妄想を書いているので、恥の上塗りというつもりで書いていこう(苦笑)。
9か月ほど前に、「勝手に妄想するSilverthorne 前編」及び「勝手に妄想するSilverthorne 後編」で結論付けたように「P6以来のMicro OpsがSilverthorneでは採用されないのではないか?」というところは変わっていない。それどころか、その後に明らかになった情報(非公式)などで、そのことをより強く確信している。
まず、本質的なところから指摘すると、P6系(Pentium Pro以降、Core 2 Duoに至るマイクロアーキテクチャを持つマイクロプロセッサ)とその前のP5系(Pentium、MMX Pentium)を比較すれば、同一プロセスかつ同一クロックの場合、パフォーマンスではP6系が優れるが、消費電力ではP5系の方が少ないということがある。これは、IA-32(x86)命令をμOps(マイクロオペレーション、マイクロ命令、Micro Opsなどとも表記される)に分解し、それを逐次実行するのではなく、投機実行を含め、効率よりもより多くの命令を処理することを目指しているからである。つまり、無駄が発生したとしても、それ以上に命令を処理し、逐次実行するよりも結果として多く命令を処理できればいい、というのがP6系の真骨頂で、それをさらに拡大したのが、Pentium 4で採用されたNetBurstマイクロアーキテクチャであった。
これは、パフォーマンスのために効率(消費電力)を犠牲にしたとなるが、最近のCore マイクロアーキテクチャを持つマイクロプロセッサを見ればわかるように、P6系の子孫でありながら、低消費電力や命令実行効率の改善は目を見張るものがある。このノウハウを、P5系以前のマイクロプロセッサのようにx86命令をネイティヴに実行するものに適用したら、どのようなマイクロプロセッサとなるだろうか。これが、Silverthorneである、と私は考えている。
x86命令をネイティヴに実行するマイクロプロセッサは、Intel社以外の他社ではVIAのC7(C5)や、AMD社のGeodeなど、メジャーではないが生き残ってきた。これらとSilverthorneの違いは、Intel社が長年培ってきたノウハウを再び最新プロセスで製造した点にある。古いアーキテクチャを永らえさせてきたのではなく、最新の技術で生まれ変わらせたSilverthorne。注目は、改良されたHyper-Threadingテクノロジをサポートしたということだろう。
また妄想の世界に突入するが、改良されたHyper-Threadingテクノロジとは、NetBurstマイクロアーキテクチャで採用されたものと本質は同じものだと思っている。NetBurstマイクロアーキテクチャにおけるHyper-Threadingテクノロジの本質は、長大なパイプライン及びスーパースカラによるペナルティによって命令実行効率が下がり、演算機構の多くが遊んでいる状態を解消するためのものだった。演算機構を遊ばせないため、命令の投入口を複数(2つ)設け、一つのプロセッサコアでありながら複数(2つ)のプロセッサであるように見せかけていた。
一方、Silverthorneは長大なパイプライン及びスーパースカラを持たず、x86命令をμOPsに変換することもない。命令の並び替えも投機実行もない(x86命令は可変長命令)のだから、P5系からP6系に移行する際に言われたP5系の弱点はそのまま残っているはずである。それは、可変長命令であることに起因するパイプラインの渋滞である。これにより動作クロックを引き上げることができず、性能を向上させることに限界があるとされ、可変長のx86命令を等幅のμOpsに変換するというオーバーヘッドを与えてまでも動作クロックを大きく引き上げたP6マイクロアーキテクチャに取って代わられた。
しかし、これは350nm(0.35μm)プロセスや250nm(0.25μm)プロセス、動作クロックでいえば0.3~0.5GHz(300~500MHz)の時代の話である。MMX Pentium(P5系)の最終形となったコードネームTillamookは、300MHzの動作クロックを達成し、専らMobileプロセッサとして活躍したが、この頃のP6系プロセッサはPentium II(コードネームDeschutes)であり、動作クロックは400MHz前後だった。この頃、L2キャッシュメモリを取り去ったP6コアを持ったCeleronがデビュー(最初のCeleronブランド)したが、Pentiumより大きく性能が劣ると酷評された。これはL2キャッシュがP6マイクロアーキテクチャには欠かすことができないというだけでなく、単にプロセッサコアレベルで比べれば、x86命令をネイティヴに実行する方が速いという証左である。今は亡き、Cyrix社が最後までネイティヴ実行にこだわっていたが、動作クロックを思ったように引き上げることができずに敗北した歴史はあるが、その部分さえ克服できれば、十分に通用するアプローチであることは自明であるだろう。
横道に逸れてしまったが、可変長命令では動作クロックを引き上げることができないという弱点は、熱容量設計の関係で物理法則を無視さえすれば、トランジスタのロジック上は10GHzを達成できる時代には弱点でなくなる可能性を示唆する。つまり、ロジック回路レベルにおいて、μOpsで10GHzが可能なら、x86命令でその5分の1の2GHz程度で動作させることは不可能ではないだろう。素性では、ネイティヴ実行の方が速いのは明らかなので、Coreマイクロアーキテクチャよりも同クロック上では速いかもしれない。
しかし、話はそう単純ではない。可変長命令におけるボトルネックは、パイプラインの渋滞であり、命令を実行するまでの間に問題がある。これを改善するのが、改良されたHyper-Threadingテクノロジだと予想する。SilverthorneにおけるHyper-Threadingテクノロジの本質は、可変長命令によりパイプラインが渋滞するため、命令の投入口だけでなく主要な演算機構も複数(2つ)持たせ、命令実行効率を引き上げるということ。つまり、NetBurstマイクロアーキテクチャでは長大なパイプラインによるペナルティ、Silverthorneでは可変長命令によるパイプラインの渋滞、どちらも演算機構を遊ばせることを少なくするための措置だと考えるのである。
と、ここまで書いておいて何だが、もうすぐどうせISSCCでSilverthorneの発表があるのだから、おとなしく待っていることにしよう。
コメント