ゲーム機とFPU

update : 乗算器のくだりを削除。Vectrexは6809なので掛け算(8 x 8 = 16bit)命令が有る。
今でこそ、ゲーム機にFPUが搭載されているのは当たり前と言えるが、実はゲームで浮動小数点演算が当たり前になるよりも先にゲームでポリゴンが当たり前になってしまった。

必要性

まず、本物のプログラマはFPUを必要としない(cf. http://ja.wikipedia.org/wiki/%E6%9C%AC%E7%89%A9%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AFPascal%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%AA%E3%81%84 )。本物のプログラマは値域を正確に管理し、演算を適切に配置し、適切な固定小数点フォーマットを適切な場所に適用できる。
というわけで、FPUは長いことゲーム機には搭載されなかった。本物のプログラマだけがゲーム機のソフトウェアを書いていたので、いわゆる3Dゲームでも固定小数点DSPが使用されていた。
平たく言えば、PS/SSまでのゲームにはFPUは無い。
FPUがゲームの何を変えたのかについてはコメントしづらい。例えば物理シミュレーションが多少書きやすくなった(= 外部のライブラリを流用しやすくなった)。。と言えるかもしれないが。。少なくともスクウェアのトム・ソーヤのような例外を除けば、ゲームの点数は整数で、浮動小数点数にする必要性が無い。

FPUとベクタ演算

FPUを最初に搭載したアーケードゲーム機はなかなか思い当たらない。SEGAModel1(92年)は外付けのFPUを持っていたが、NAMCOのSystem21(89年)は固定小数点ベースだった。
FPUを搭載した最初の家庭用ゲーム機はNintendo64で、MIPSの常識的なFPUを搭載していた。驚くべきことに、Nintendo64よりも後の世代の据置ゲーム機にはすべてFPUが搭載され、すべてベクタFPUを搭載している。つまり、DreamcastのSH4やPS2のEmotionEngine、XboxPentium3...はすべて128bitの4-wayベクタFPUを搭載している。ポリゴンの座標計算には4x4の行列演算が頻出するため、128bitのベクタFPUはリーズナブルな選択といえる。
携帯ゲーム機では、NintendoDSが最後の固定小数点マシンとなった。
また、家庭用ゲーム機では、外付けのFPUは採用されなかったことになる。比較して、外付けの乗算器 = 固定小数点DSPはかなり採用されている(マリオカート等に見られるDSP-1や、メガドライブのSVP等)。

その他のアーキテクチャ

FPUの搭載は、家庭用ゲーム機とコンベンショナルなコンピュータ、要するにPCとのアーキテクチャ的な差異を大分埋めた。しかし、メモリアーキテクチャには未だにそれなりの差異がある。
最初にFPUを搭載したNintendo64でも、キャッシュはいわゆるDirect-mapなキャッシュであった。SH4もdirect-map。比較して、Pentiumは2-way associativeキャッシュで、L1キャッシュに加えてL2キャッシュもサポートしていた。
ちなみに、乗算器が最初に搭載されたのは68kを搭載していたメガドライブ(88年)と考えられる。逆に言えば、それまでのゲームコンソールのCPUには乗算命令が無かったことになる。掛け算を使わずにゲームが作れるか。 See comment.
現在はスマートフォンが有るので、ゲーム機のようなアーキテクチャはこれといって特殊でない。極論を言えば、NintendoDSが最後のゲーム機であり、それ以降のゲーム機はPCと大差ない。例えばWebKitとか.net FrameworkのようなPCと大差ないソフトウェアを動かすボリュームが非常に大きくなったため、あまりPCやスマートフォンからかけ離れたアーキテクチャは選択できなくなった。(特殊なメモリを採用しているが、それはsoftware visibleな差はつくらない - その証拠に、現行の据置ゲーム機すべてでLinuxが動作する。)
PCやスマートフォンのようなアーキテクチャ - C言語プリミティブをすべてネイティブCPU命令で表現でき、コプロセッサを持たず、フラットで広大で仮想化されたメモリ空間を用意するアーキテクチャに全てが収斂されるかというとなんとも言えないが、少なくとも現状のゲームを実行するゲーム機に関して言えば、特殊なアーキテクチャを採用する理由は既に無いだろう。C言語にはdoubleやfloatが有るので、FPUは既に省略不能と言える。