第1回 Pentium IIIとAthlonなるモノ:頭脳放談
同じx86プロセッサだが、どこかが違う。Pentium IIIとAthlonの両者の仕組みや構造の違いについて解説しよう。
Athlon、最初そのネーミングを聞いたとき、古代ギリシアのオリンピックにでも出てきそうな筋骨たくましい青年のイメージかと思った。アスリートとかアポロンとかが想像できるからかもしれない。ここで、カタカナ表記にしてアス...と書いてみたら、一寸卑猥な英語を想像してしまった。以下、Athlonと英語表記に統一することにする。筆者は、そのネーミングのいわれを知らないのだが、結構かっこいいと名だと言っておこう。蛇足だが、最近、Athlonの弟分のプロセッサにDuronという名前が付けられた。インテルが低価格品に「Celeron」という名を付けて、高価な製品群と一線を画しているのを見習ったのかもしれない。Duronの後で、Mを頭文字にするプロセッサも出して、めでたく「AMD」と3文字が揃うようにしたらどうか、と思ったのだが、これはちょっとしつこすぎるかもしれない。
Pentiumという名前は、ラテンのフレーバーがする。XXチウムとか言われると、ついローマ帝国を想像してしまうのは、塩野七生の読みすぎだろうか(文庫本しか読んでないけど)。しかし、続くCeleronに比べると「5(Penta)」という数字に縁がある分、伝統の重みを感じさせる。なぜ、伝統なのか分からぬ読者のために、そのうちローマ帝国に匹敵するx86の長い歴史を語る必要があるだろう。さらに、これに「Xeon」を付けて「Pentium III Xeon」などとなると、荘厳な感さえある。サーバ機として奥の方に鎮座ましましているマシンには最適な名であろう。その点Celeronは、発音を説明するのに、ある米国人がセロリ(もちろん、英語だからセルリーってな感じ)を引き合いに出していたが、チープというより、生活感のあるネーミングといえるかもしれない(?)。
Pentuim IIとCeleron、Pentium IIIの本質はすべて一緒だ
プロセッサは、しょせんは大量生産される工業製品であるにもかかわらず、何か、不思議な力のあるもの、理解の及ばないものという意識で人々に思われるようになってきている。いや大量生産され、あまねく世界に存在し、今や世界を動かしている反面、よく分からない存在であるからこそ、そう思われているのかもしれない。確かに数千万個ものトランジスタを集積したプロセッサなど、専門家でも正確な全体像を把握するのは容易なことではない。ましてや平均的な日本人に、「Branch Prediction」、「Speculative Execution」と言っても何のことだかさっぱり分からない。だからといって、代わりに「分岐予測」とか「投機的実行」と訳語を当てても、事態は好転することにはならない。むしろ、プロセッサが「予測」したり、「投機」したりするのは何なのだろうか、と余計に謎を深めてしまいそうだ。
というわけで、最初はPentium IIIとAthlonを比較しつつ、一般の人にも分かるようにプロセッサ技術の系統的な解説記事を書こうかと思ったのだが、やめることにした。私は、一般の人向けにそんな立派な解説を書けるような人物ではない。大体、Pentium IIIとAthlonは似たプロセッサで、値段次第でどっちを買ってもいいと思っているくらいなのだ。ちなみに、この原稿はいまだにMMX Pentium-166MHzで書いているし、486DX-33MHz機も現役で使っている。どのプロセッサがベストなのか、といった記事は書けないに決まっている。
実際、Pentium IIIとAthlonを比べてみて、いろいろと優劣を議論するのは可能だが、遠くの視点からみたらその差はわずかなものだ。つまり、作っている設計者にとっては重大問題だが、一般のユーザーにとっては一喜一憂するほどの問題とはいえない。ネーミングは違うが、Pentium II、Pentium IIIとCeleronも似た、というより同じプロセッサである。昔のPentium Proも含めて、動作クロックや2次キャッシュのサイズと実装方法、パッケージ、そしてMMXやインターネットSIMD拡張命令(SSE)といった新しく追加された命令セットなどの違いで、多くの品種に分かれているだけである。その本質は、すべて一緒なのだ。Pentium II、Pentium IIIとCeleronの違いより、同じPentiumの名を持つ初代PentiumとPentium IIの差のほうが断絶は深くてせつない。
●Pentium IIIとAthlonの違いはまずデコーダに見つかる
Pentium IIIとAthlonを比べたときにどのような違いがあるのか、多くの人にとってはどうでもいいような話題かもしれないが、ちょっとほじくり返してみるので、お付き合いいただきたい。Pentium IIIとAthlonのパイプライン(そのうち説明するつもりだ)を入り口から見ていったときに、まず誰でも気づくのがインストラクション デコーダがシンメトリ(対称)かそうでないかということだ。 インストラクション デコーダとは、命令解読器と訳されるが、0と1の並びである機械語命令を解読し、どのような仕事をしたらよいのか、プロセッサが認識する最初のステージなのである。エンジンにたとえれば、インストラクション デコーダは吸気装置のようなものと思えばいいだろう。燃焼(実行)に必要な空気(機械語命令)を吸い込むわけだ。x86は、命令の長さが一定ではなく、1byteから15bytesまでの可変長となっており、Pentium IIIもAthlonもフェッチした後にすぐデコードできるわけでない。どこが命令の頭なのか最初は分からないので、「アライメント(整列)」と呼ぶ頭出しのステージで命令の先頭を見つけ出してから、命令のデコードに取りかかる。x86プロセッサを設計する場合、ここに1つのキモがある。いくら大きなエンジン(実行部)を搭載していても、空気が取り込めないのでは、エンジンは止まってしまう。そこで、なるべく空気(機械語命令)を上手に取り込むための仕組みが必要になるわけだ。
●AthlonとPentium IIIではターボ チャージャのデキが違う
Pentium IIIとAthlonは、どちらも複数命令を一度にデコードするために、複数のインストラクション デコーダを用意している。Pentiumより前のプロセッサには、インストラクション デコーダが1つしかなかったことを考えると、Pentium以降はエンジンにターボ チャージャがついたようなものである。ガンガンと命令を吸い込むことができる。しかし、AthlonとPentium II/IIIではこのターボチャージャの出来がちょっと違う。Athlonはシンメトリ(同じ機能のものが並んでいる。実際には中くらいに複雑な命令を解読できるインストラクション デコーダが複数ある)なのに対し、Pentium IIIは、シンメトリでない(ハードをけちって簡単な命令だけデコードできるデコーダを2つ並べ、中くらいに複雑な命令までデコードできるデコーダは1つしかない)。そのためPentium II/IIIは、レジスタ間オペレーションといった簡単な命令を主体とした最適化(Pentium II/III用にコンパイル)を行ったコードでないと性能が出にくいと言われている。一方のAthlonは、486やPentiumの頃にコンパイルされたようなコードでも性能が出るハズ、という議論になる(つまり、昔のプログラムでもAthlonは速いかも、ということ)。でも、ターボ チャージャの特性が影響するところまで車を乗りこなすのが難しいのと同様、このあたりの差が響くようなPCの使い方をするのもやはり難しい。
●設計者の視点でプロセッサを見てみよう
確かに、マイクロアーキテクチャの設計者にとっては、x86特有の大きな問題の1つが、「可変長で複雑なCISCコードをどう始末するか」という点にあるのは明らかで、私にとっても大変興味がある話題だ。実際、上述の問題はPentium Proで一度問題となり、Pentium ProからPentium IIへ進化する過程でIntelも手を加えている。そのため、この問題はPentium II/IIIではかなり改善していると考えられる。それほど深刻な問題とは思えないが、違いといえば違いだ。ところで、上の記述を注意深く読んでもらえれば分かるが、中くらい以上に複雑な命令はどうなっているんだ、という問題もある。しかし、この議論については、細かな構成や実現方法はさておき、Pentium IIIとAthlonでの最終的な制御の形態はまったくと言ってよいほど同じになってしまうハズだ、と断言できる。
この連載では、こんなことを楽しくほじくれるようにしたい。そのためには読者にもいっそ設計者の視点でプロセッサを見てもらうのがよい、と考えた。ということで、本稿では一般の人向けにプロセッサを解説するなどせず、いっそのことプロセッサ設計者になって、一緒に設計現場の舞台裏を覗いてもらおうという趣旨で書き進むことにする。
筆者紹介
Massa POP Izumida
日本では数少ないx86プロセッサのアーキテクト。某米国半導体メーカーで8bitと16bitの、日本のベンチャー企業でx86互換プロセッサの設計に従事する。その後、出版社の半導体事業部を経て、現在は某半導体メーカーでRISCプロセッサを中心とした開発を行っている。
「頭脳放談」
Copyright© Digital Advantage Corp. All Rights Reserved.