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

Pentium 4の惨憺たるベンチマーク結果はなぜ生じたのか

●バンプの道を走る高速車

 Pentium 4の性能が、現状のベンチマークテストで発揮できないのは、Pentium 4のアーキテクチャのためだ。Pentium 4で刷新された3つの重要なアーキテクチャ、つまり、マイクロアーキテクチャ、命令セットアーキテクチャ、バスアーキテクチャのそれぞれを見て行くと、性能が発揮されない理由が見えてくる。

 まず、マイクロアーキテクチャでのPentium 4の最大の特徴は「クロック命」と割り切った点だ。クルマに例えると、スピードが出るようにしたわけだ。そのため、Pentium 4のパイプラインは、20段と異常に深い構成になっているが、トレードオフとして分岐予測が外れた場合にペナルティが大きくなってしまった。これはクルマに例えると、バンプが多い道を走るようなもので、いくらクルマ自体のスピードが速くても、バンプごとにスピードが相殺されるので速く走ることはできない。

 これは、オフィスアプリケーションのようなソフトでは特に顕著になるという。それに対して、浮動小数点演算やSIMD演算を繰り返し行なうようなコードが多い場合には、原理的にこのペナルティはそれほど響かなくなる。そのため、Pentium 4のマイクロアーキテクチャは、整数演算主体のアプリケーションでは不利に、浮動小数点演算/SIMD演算主体のアプリケーションでは有利に働く傾向がある。

●車線は広いのに交通量が少ない

 命令セットアーキテクチャでのPentium 4の特徴は、既存命令からの移行を促している点だ。Intelはこれまでの命令アーキテクチャの拡張では、基本的に既存の命令にプラスアルファするだけだった。しかし、Pentium 4では、従来の浮動小数点演算命令だったx87命令からSSE/SSE2命令への移行を明確に推奨している。つまり、x87命令の代わりにSSE/SSE2命令を使うようにと言っており、SSE2の方が演算のレイテンシも短くなると言っている。

 そのため、Pentium 4の浮動小数点演算性能はSSE/SSE2命令を使わないと発揮されない。実際に、ベンチマークの結果でもx87命令性能は上がっていない。Pentium 4では、浮動小数点演算/SSE/MMXユニットの面積が比較的大きいので、性能はかなり強化されていると見られるが、SSE/SSE2命令を使わないとその性能は発揮できない。つまりPentium 4は、ソフトをAthlonでは動かないSSE/SSE2命令に書き換えないと真価が出ないアーキテクチャなのだ。これは、クルマに例えると、フルスピードで走るためには、専用の高速道路を造る必要があると言っているに等しい。高速道路が完備されるまでは、全開で走ることができないことになる。

 Intelがこうしたアーキテクチャを取ったのは、アキレス腱である浮動小数点演算性能の低さがx87命令に起因していると考えたからだと見られる。x87は時代遅れのスタックレジスタ構造であることが性能向上の限界だとよく言われるが、SSE/SSE2命令へ移行するとフラットレジスタになるので、この問題は解決できる。

 バスアーキテクチャでのPentium 4の特徴は、FSBがPentium IIIの3倍の3.2GB/secまで帯域が広げられたことだ。しかし、帯域を広げただけでは性能は上がらない。それは、ほとんどのアプリケーションではこれだけの帯域は必要ないからだ。クルマに例えると、いくら車線を広げても、走るクルマの数がそもそも少なければなにも効果はないからだ。

 FSB帯域を大量に食うのは命令ではなくデータなので、大量のデータを食うマルチメディア系のアプリケーションが、Pentium 4のFSBを意識して書かれるようにならないと、真価は発揮できないと見られる。つまり、広げた車線を目一杯使う交通量が生じないと、意味がないというわけだ。

●Crusoeと同様にコードの局在性が高いほど性能が上がる

 このほか、面白いのは、Pentium 4は実際に実行するコードの“局在性”が高いことを前提としたアーキテクチャになっていることだ。Pentium 4では、深いパイプラインのペナルティを減らすために、x86命令をPentium 4の内部命令「μOP」に変換するx86命令デコーダを、1次命令キャッシュであるトレースキャッシュの前に出している。そのため、トレースキャッシュにヒットし続ける限り、5~7段になると思われるx86命令デコードステージが必要なく、その分、パイプラインが短くなる。逆に、トレースキャッシュにヒットしないと、またペナルティがあるというわけだ。

 そのため、Pentium 4では、実際に実行されるコードが局所的に偏在している(局在性が高い)ほど性能が出ることになる。これは、今のCPUはどれも同じなのだが、Pentium 4はトレースキャッシュミスのペナルティが大きいため、特にその傾向が強くなる。面白いことに、同じ特徴をTransmetaのCrusoeも持っている。実際には、多くの一般的なソフトがこうした局在性の強い傾向を持っているため、効果は大きい。しかし、一部のベンチマークテストでは、この特徴が不利になる可能性も高い。つまり、Crusoeがベンチマーク性能が出ないのと、ある程度共通した現象がPentium 4で起きている可能性もある。

 Intelはこのトレースキャッシュにかなりの容量を取っている。トレースキャッシュには、最大12,000個のμOPを搭載できるので、もしμOPのサイズが多くのRISC CPU同様に32ビット長だったらその物理サイズは「4B×12k=48KB」となる。以前にこのコラムでの第1報で12KBと書いたのは間違いだ。もっとも、内部命令長は16/24/32ビットといった切りのいい数である必要はまったくない。ようは、RISCに換算すると48KB分のトレースキャッシュを搭載しているということだ。

 ある関係者によると、Intel CPUの内部命令の構造はトップシークレットで、Intel内のエンジニアでも知っている人は少ないという。ちなみに、今、μOPについてわかっているのは、固定長命令でロードストアアーキテクチャを取ることと、一部の単純命令のコンバインを行なうことなどに過ぎない。

●IA-64に取られているIntelのリソース

 こうして見ると、Pentium 4ではそのアーキテクチャのために、現状のベンチマークの多くで性能が発揮できない構造になっていることがわかる。Pentium 4が性能を引き上げたいと考えているアプリケーションが、SYSmark2000などに含まれていないのだから、これはしようがないと言えばしようがないのかもしれないが、この問題は、Pentium 4が超えなければならない大きなハードルとなっている。

 Pentium 4のハードルが高いのは、アーキテクチャ的には15年前の386以来の巨大なチェンジだからだ。冒頭で述べたように、Pentium 4では、マイクロアーキテクチャ、命令セットアーキテクチャ、バスアーキテクチャの3つをすべて刷新しており、その革新が痛みを伴うというわけだ。x86系初の32ビットCPUだった386でも、この3つのアーキテクチャが同時に変更され、メモリ管理が大幅に改善された。だが、PCでは、未だに386への最適化(32ビットへの完全移行)すら終わっていない。Windows 9x系OSは16ビットコードを含んでいるからだ。

 おそらく、Intelとしては、自分たちの考えの方が進んでいて、ソフトウェアの方が追いついていないという感覚が強いと思われる。しかし、上に乗るソフトウェアがなければPentium 4も意味がない。Intelとしては、ソフトベンダーのPentium 4最適化(=SSE2最適化)をなんとかして推進しなければならない。

 しかし、ここにIntelは全力を注ぐことができないだろう。というのは、ソフトベンダーの最適化を支援するIntel内部のエンジニアリングリソースのかなりの部分が、大作業であるIA-64へのポーティング支援に割かれていると推定されるからだ。ここでも、IntelはIA-32とIA-64の2正面作戦を取った不利を、嘆くことになるのかもしれない。

□関連記事
【11月22日】後藤弘茂のWeekly海外ニュース
なぜPentium 4の性能はAthlonに劣るのか
http://pc.watch.impress.co.jp/docs/article/20001122/kaigai01.htm
【HotHot!】【速報】登場したばかりのPentium 4をベンチマーク!
http://pc.watch.impress.co.jp/docs/article/20001121/hotrev85.htm


バックナンバー

(2000年11月22日)

[Reported by 後藤 弘茂]


【PC Watchホームページ】


ウォッチ編集部内PC Watch担当pc-watch-info@impress.co.jp

Copyright (c) 2000 impress corporation All rights reserved.