サターンのCPU
目次
乗除算
25MIPS が目標の値となっていますが、MIPS とはドライストンベンチマークというプログラムの実行速度を意味しています。ドライストンベンチマークは、各種プログラムを丹念に調べ、使われている処理の種類や、その発生頻度などを元に「一般的プログラムを動かした場合」の性能指標を得るために作られたプログラムです。
…逆に言うと、一般的ではない、特定用途に偏った処理内容になると、ドライストーンは必ずしも CPU の性能を示すものではなくなります。R3000 と SH2 は共に 25MIPS ですが、現実的には同じ性能ではないのです。
セガは、一般的なコンピューターを作成しようとしているのではありませんでした。究極の2Dゲーム機…そして少しは3Dも使えるゲーム機を作ろうとしていたのです。
ですから、同じ MIPS 値であれば、ゲームに使える機能が速い CPU こそが、本当に速い CPU です。
日立のストーリーによれば、条件の一つとして「ゲームソフトを想定したベンチマーク結果の提示」が入っているのは、そのような意味です。
R3000 も SH2 も、基本命令は1クロックで実行されるため速度差はありません。命令の動作は多少違いますが、ある程度の規模のプログラムでは、命令の動作の違いによる差はそれほど出ないでしょう。
速度差を決める一番の要因は、おそらく乗除算性能の違いによるものとなります。3Dゲームでは行列の計算を多用しますし、2Dでも回転などの表現に乗算は欠かせないためです。
これが、もう一つの条件である「乗算器の性能の向上」の理由でしょう。
さて、では SH2 と R3000 の乗除算を比較してみましょう。
R3000の掛け算は少し特殊です。
CPU が掛け算を指示すると、掛け算の計算が始まりますが、結果が出る前に次の命令が実行されます。
その後も、しばらく掛け算の結果が出ることはありません。
掛け算は、12クロック後に終了するとわかっています。
なので、他にできることを十分にやってから、「結果を教えて」と命令を出します。
すると、掛け算の結果が手に入るのです。
つまり、他の命令と一緒に実行することはできますが、掛け算は12クロックです。
掛け算と足し算をひたすら繰り返す行列演算において、「掛け算と足し算と、次の計算の準備」をあわせて 12クロック、と考えてよいでしょう。
SH2 は、掛け算を2~4クロック(通常は3クロック)で行います。
掛け算中に別の命令を実行することはできません。しかし、掛け算と足し算を同時に行う命令(積和命令)はあり、3Dの計算ではこれが役立ちます。
しかも、実は積和命令は行列計算用に特化されていて、積和と同時に次の計算の準備も終わらせてくれているのです。
12クロック対3クロック。これが R3000 と SH2 の乗算速度の差でした。
セガの要望には、乗算器の性能向上はあるのですが、除算器についてはふれていません。
SH1 の乗算器は 16bit 演算のみが対象でしたが、これはゲームを作るうえでは精度不足です。そこで32bit の対応を依頼したのでしょう。SH2 には 32bit乗算器が付いています。
それに対し、除算器は SH1 の時から 32bit に対応していました。ただし…除算器があるにも関わらず、「除算命令」は存在しません。
SH1/2 では、命令の1クロック実行を重視して、除算命令は「筆算の1桁分」を行う機能なのです。16bit除算なら16回、32bit除算なら32回繰り返すことで、やっと結果が求まります。
1桁の計算の前に、計算する数をセットする命令を実行する必要があります。また、32bit 演算の場合、結果はキャリーフラグに現れるため、ローテート命令で結果を入れたいレジスタに取り出します。
つまり、16bit 除算は17クロック、32bit 除算は 65クロックで完了しました。
これに対し、R3000 は 32bit 除算しかもちませんが、乗算と同じように計算中に他の命令を実行できます。なので速度は単純に比較できませんが、除算は 35クロックでした。
3Dゲームでジオメトリ演算を行う場合、16bit の除算で十分な精度でしたから、これも R3000 よりも SH2 の方が速いことになります。
つまり、SH2 は比較した CPU の中で、性能が一番高く、プログラムサイズが小さく、そして安かったのです。
まとめ
日立のストーリーでは、担当者が強い決意でセガに臨んだ時、「あぁ、いいですよ」の一言で決まって拍子抜けした、と言う話が出ていました。
V810 と R3000 が候補になっていたときのように、それぞれに一長一短がある状態では、自社の CPU の利点をアピールする必要があったでしょう。担当者の「強い決意」とは、そのようなアピールを粘り強く行う、と言う意味だったと思います。
しかし、セガ側は「あぁ、いいですよ」とあっさり採用を伝えます。つまり、他の候補など考えられないほど、SH2 の性能は圧倒的だったのでしょう。先に数字を挙げて検討の過程を追体験してみたわけですが、これで V810 や R3000 を選ぶことは無いように思います。
V810 に決まりかけていた、と言うくらいだから、すでに V810 のクロックを上げられるか NEC が検討していて、頼んだ以上はその返事が来るまで日立に返事ができなかったとか…
ありそうな話ですが、真相はさすがに闇の中です。
この時点では「CPU1つ」の性能で選ばれていることも注意してください。V810 や R3000 を選んでいたらツイン CPU もあり得なかったでしょうね。(SH1 にもマルチプロセッサ機能はないのですが)
SH2 なら2台搭載することで性能を倍増できる、というのは、セガの思惑とは全く別のところで進んでいた機能です。それを、後にセガが使用しただけ。これがなかったら性能的にプレステにボロ負けしていたわけで、運の良い偶然だったように思います。
以上、すべては「おそらくこうだったのではないか」という想像にすぎません。
実は、サターンの記事を書こうと調査中、「SH2は当時知られたていなかったので、解析されないと思って選ばれた」という説を見つけました。
それ、ファミコンが 6502 採用した理由だから!
ファミコンの場合、発売時は CPU を明らかにしていませんでした。しかし、サターンは SH2と最初から明かしています。CPU がわかってしまえば、メーカーに問い合わせて命令表は入手可能ですし、そうなれば解析も簡単。「解析されないと思って」選ばれた、という線はまずない、と感じました。
じゃぁ、SH2 が選ばれた理由は何なのか? 他の CPU は何故選ばれなかったのか? それを知りたかったのが今回の記事をまとめたきっかけでした。
そして、やはり SH2 がベストな選択であった、と言うことがわかりました。
SH2 が採用された、という歴史の事実があるのだから、明らかに良いものが選外になっていたらそれなりの理由があるはず。途中の説明は、僕なりに考えた理由であり、解明できなかったいいわけでもあります。
セガサターンではなく、SH シリーズのその後の話です。
この頃発売された世界初のデジタルカメラ QV-10 は、CPU に SH1 、内部ソフトに TRON を搭載しており、大ヒットします。
もちろんセガサターンも大ヒット。…いや、プレステに負けたとかそういう話じゃなくて、SH2 を作っていた日立としては、想像を超える売り上げになったわけですよ。
SH2 は大量生産されたことで値段が下がり、他の組込み分野でも使われ始めます。だって、上に見たように組込み用途に限れば当時最高の CPU なんですから。SH が世界中から注目されていた時代でした。
ところで、ARM は現在 16/32/64bit 混在だけど…という話を途中で出しましたが、SHの売り上げが急に伸びたことで、組込み分野に強かった ARM は慌て、SH と同じ命令長の「16bit 命令モード」を付加します。これが 16/32bit 混在になったわけ。64bit は性能向上を狙ってさらに後に追加されたもの。
モードと書きましたが、1命令ごとに長さが変わる i486 や MC68040 とは違い、モード切替方式です。16bit モードでは全命令が 16bit になるので、i486 のような「無理」はしなくてもいい。RISC の単純さはちゃんと残っているのです。
16bit 命令が Thumb と呼ばれるのもいいですね。「サムネイル」のサムで、小さい意味を持っていますし、ARM (腕)に対して Thumb (親指)でもあります。
で、ARM は Thumb 命令を追加して組込み分野に反撃し、一時期 SH が築き上げた牙城を一気に崩します。現在ではまた ARM が幅を利かせていますね。
組込み分野は、「過去の資産」をそれほど気にしなくてよい世界なので、あっという間に勢力図が塗り替わることがあります。最近は Intel が Quark (Atom よりも小さくて低消費電力) を発表し、ARM の牙城を崩しにかかっています。
SH をはじめとする、日本勢の巻き返しはあるのでしょうか? 頑張ってほしいものです。
参考文献 | |||
マイクロプロセッサ・アーキテクチャ入門 | 中森 章 | 2011 | CQ出版社 |
SH-1/SH-2/SH-DSP ソフトウェアマニュアル | ルネサスエレクトロニクス | 2005.1 | |
SHマイコン開発-最終回 | 枝 洋樹 | 1997年9月22日号 | 日経エレクトロニクス |
その他、WEB上の各種ページ |