|
●変なユニットがいくつもあるGekko
ゲームキューブは、CPUもゲーム機に向けて最適化されている。ゲームキューブのCPU「Gekko」は、PowerPC 750をアーキテクチャ拡張したものだ。拡張と言っても、PowerPC 750をベースから大きく変えてしまったのではなく、ゲーム機に必要な機能を最小限のコストで追加したアーキテクチャになっている。これもほかのゲーム機アーキテクチャと対照的だ。
例えば、XboxはPC向けのPentium IIIを、機能はほぼそのままで買い叩いたものを搭載する。一方、PlayStation 2はMIPS IIIをベースにしたものの、ほとんどフルスクラッチからゲーム機用プロセッサ「Emotion Engine」を開発した。ゲームキューブのアプローチはちょうどその中間になる。つまり、開発費用はかかるもののPlayStation 2ほどではなく、Xboxよりはゲーム機向けに最適化されている。
Gekkoの拡張部分はなかなか面白い。下が、発表されているGekkoのブロック図をアレンジした図だ。赤い線で囲われているのがゲーム機用に新設あるいは改良されたユニットだ。
こうして見ると、CPUとしての基本的なユニット構成は変わっていない。変えた機能は、大きく分けると3つ。1はロードストアユニットで、グラフィックスデータの圧縮/伸張を可能にする機能が加わった。2はデータムーブメントに関わるユニットで、ゲームプレイに特有のデータのトランスファを効率よく行なえるようになっている。3は浮動小数点演算ユニットで、ゲームプレイに必要な高い浮動小数点演算性能を得られるようにユニットが改良された。このほか、L2キャッシュもPCプロセッサ並みの256KBに拡張されている。
まず、基本的なアーキテクチャから見て行こう。
基板中央にFlipper その下にGekko |
Gekkoはエンハンスメントされたものの、PowerPCのレジスタアーキテクチャはそのまま保っている。そのため、PowerPCベースのコードの移植は容易だ。命令発行も、2命令同時発行+ブランチ命令のまま。ちなみに、ここで+ブランチになっているのは、PowerPCではブランチユニットをフェッチユニットにくっつけて、分岐ミスのペナルティを減らしているからだ。
ゲームキューブのチップ数が少ないのは、Flipperにほとんどの機能を集約してしまっているからだ。PC的な表現をするなら、ビデオチップ、ノースブリッジ、サウスブリッジ、オーディオDSP、さらにビデオメモリまでがワンチップに納められている。では、具体的にゲームキューブの構造がどうなっているのか見てみよう。
●グラフィックスデータ圧縮機能
ゲームマシンのための拡張はというと、まず目立つのが3Dデータ圧縮伸張機能だ。これは、グラフィックスエレメンツのデータのうち、精度が要求されないものは整数データにしておき、ロードする際に浮動小数点データに変換して演算するものだ。IBMの資料によると、下のようなデータは単精度(32bit)浮動小数点データである必要がなく、右のような精度(8~24bit)でいいという。
Position : 16 bits
Surface normal : 8 bits
Weighting coefficient : 8 bits
Transformation matrix : 24 bits
で、ゲームキューブでは8または16bitで表せるデータは、その精度で格納しておき、Gekkoが単精度浮動小数点データに変換する。あるいは、その逆に、演算結果の単精度データを8または16bit整数演算データに変換する。その分、データサイズは小さくなり、占有するメモリの量やFSBの帯域を減らすことができる。つまり、メモリやFSB帯域がボトルネックになるのを避けることができる。逆を言えば、FSBとメモリの限界を超えた、より複雑な描画が可能になる。
もっとも、浮動小数点データと整数データのコンバート機能自体は、最新のCPUはだいたい備えるようになっている。例えば、Pentium III/4もSSEとSSE2で、整数レジスタと浮動小数点レジスタのコンバート命令を加えた。しかし、Gekkoが違うのは、このコンバート機能をロードストアユニットに組み込んでしまった点だ。そのために、「Load Q」と「Store Q」という、コンバートしながらロード/ストアする命令を加えている。
例えば、Load Q命令でL1データキャッシュから16bit整数の座標データを読み込むと、ロード/ストアユニット内の「Load dequantizer(逆量子化回路)」がそれを単精度浮動小数点データに変換、浮動小数点レジスタに格納する。通常のLoad命令の場合はこれを行なわない。ストアの場合は、これが逆になる。レジスタに格納してからコンバートするよりシンプルで、おそらくレイテンシも短い。
結果としてGekkoではCPUサイドでグラフィックスデータを、最大4:1(32bit→8bit)に圧縮できる。Gekkoが、実効バス帯域はピークで5.2GB/sec(実際には1.3GB/sec)になると、スペックに書かれているのはこのためだ。
●ゲームデータを効率的に転送する
Gekkoの2つ目のゲーム機向け拡張は、ゲームコンテンツに最適化したデータムーブメントだ。このために、Gekkoは「Write Gather Pipe(WGP)」と呼ぶ、名前だけではよくわからないユニットを備えている。これは、簡単に言うとグラフィックス専用のライトバッファだ。WGPの中には128ByteのFIFOがあり、32Byteづつグラフィックスコマンドストリームをパック化して、グラフィックスチップ「Flipper」にバースト転送する。グラフィックスデータはキャッシュに入れる必要がないため、ロード/ストアユニットから直接WGPのFIFOに送り込み、バスが空いたらバースト転送する。WGPはL1データキャッシュとL2キャッシュはバイパスして、バスインターフェイスに直結している。
このアーキテクチャの効果は明白だ。まず、32Byteと大きなパックにすることで、バスの実効効率はかなり高まる。それから、ぱっと考えても、再利用することがない膨大なグラフィックスストリームをキャッシュするのはムダだ。それを直接バスインターフェイスに送ることで、キャッシュの効率も高めることができる。このWGPは、使うトランジスタに対して得られる効果はかなり大きいと見られる。
L2をバイパスする仕組みはもう1つある。それは、L1データキャッシュロッキングとDMAだ。Gekkoの32KBのL1データキャッシュは、その半分の16KBがロック可能エリアになっている。Gekkoはデータを、バスインターフェイスからこのL1にDMA転送できる。おそらく、そのための命令があり、グラフィックスのような再利用のない一過性のデータだけをロックドL1に格納すると見られる。この、ロックドL1データキャッシュに読み込まれたデータは、L2には書き込まれない。これも、一過性のデータでL2キャッシュが埋まるのを避ける仕組みだ。
●単精度の浮動小数点演算の性能を2倍に
拡張部分の第3は浮動小数点演算ユニット。これは、PowerPC 750の倍精度演算器を改良して、1個の倍精度演算か2個の単精度演算を実行できるようにしている。つまり、ゲームプレイで使われる単精度浮動小数点演算に関しては、GekkoはオリジナルのPowerPC 750に対してクロック当たり2倍の性能になったことになる。単精度なら2つの積和演算を1サイクルのスループットで実行できるため、ピークでは1.9 GFLOPS(485MHzなので)の性能となるという。単精度ペアを実行する場合は、1レジスタに2つの単精度データを格納するSIMDタイプのオペレーションとなる。
ゲームだと倍精度の演算はほぼ必要ないわけで、この浮動小数点演算ユニットの拡張は、ゲームに特化した、効率的な性能強化だ。ただし、単精度のSIMDはPentium IIIもSSEでサポートしているし、Emotion Engineも4個の浮動小数点積和算ユニットを内蔵するベクトル演算ユニットを2個備えている。同じような方向性の機能強化は、いずれもやっているので、ゲームキューブだけの特徴ではない。むしろ最新ゲーム機アーキテクチャの必須項目だと考えた方がいい。
こうしてみると、Gekkoの機能強化は、小技だけど効率的なものばかりであることがわかる。つまり、最小限のシリコンコストで最大の効果を出せるようにしているように見える。これは、Gekkoのチップ自体のスペックを見るとよくわかる。
Gekkoは、IBMの0.18μmプロセスCMOS6層銅配線技術で製造されている。ダイサイズは43平方mmで、トランジスタ数はCPUコアが650万、L2キャッシュが1,600万の合計2,250万個だ。それに対して、オリジナルのPowerPC 750CXeはダイが42.7平方mmでトランジスタ数は約2,000万個。差分は極めて小さい。ダイをほとんど増やさずに、おそらくゲーム時の性能は大幅に引き上げている。ちなみに、現在のIntelのPC向けCPUで最小ダイの0.13μm版Pentium III/Celeron(Tualatin:テュアラティン)でさえ約80平方mmで、Gekkoのダイは驚くほど小さい。ただし、MicrosoftがIntelからXbox用に購入するPentium IIIの価格は、かなりディスカウントされていると言われるので、ダイの差とコストは関連しない。
ちなみに、Flipperを開発したATI Research Sillicon Valley(ATIの子会社:開発開始当時はArtXと呼ばれる独立企業だった)のGreg Buchner氏(Vice President, Engineering)によると、ゲームキューブでPowerPCアーキテクチャを採用したのもArtX(ATI Research Sillicon Valley)の推薦だったという。
「ゲームキューブの開発では非常に早い段階、'98年頃から任天堂と協力していた。そして、任天堂とプロセッサのビューティコンテスト(選択)をしたのだが、そこでわれわれはIBMを強く推薦した。そして、IBM側もそれに応えて、我々と任天堂が指示した通りの変更を加えてくれた。そうした協力関係ができたことが、うまく行った理由だと思う」
Gekkoの基本的なスペックは以下の通りだ。
クロック | 485MHz |
駆動電圧 | 1.8V |
プロセス技術 | 0.18um CMOS6層銅配線技術 |
パッケージ | 27x27mm PBGA(256ピン) |
システムバス | 1.3GB/secピーク帯域 162MHz 32-bitアドレス、64-bitデータバス |
L1命令キャッシュ | 32KB 8ウエイセットアソシエイティブ |
L1データキャッシュ | 32KB 8ウエイセットアソシエイティブ |
L2キャッシュ | 256KB 2ウエイセットアソシエイティブ |
消費電力 | 4.9W (typical) |
パフォーマンス | 1,125 DMIPS (Dhrystone 2.1) |
□関連記事
【9月25日】【海外】ゲームキューブの心臓Flipperの正体
http://pc.watch.impress.co.jp/docs/article/20010925/kaigai01.htm
【9月20日】【海外】ゲームキューブ登場。PS2/Xboxとアーキテクチャを比較
http://pc.watch.impress.co.jp/docs/article/20010920/kaigai01.htm
□バックナンバー
(2001年10月3日)
[Reported by 後藤 弘茂]