西川善司の Playstation2の魅力を探る
第5回(最終回):Playstation2のハードウェア・アーキテクチャ
|
西川善司
中学時代からコンピュータに親しみ、高校時代にはすでにライター業に手を染めていたが、大学院卒業後、日本の大企業に就職。筆者のプロフィールについては、筆者のホームページが非常に面白いので一度ご覧ください!
|
|
最終回となる今回はEEとGSのハードウェアやアーキテクチャの話をしてみたいと思う。そのため内容的には第1回の部分と重複する部分も多いが、今回はより内部的な方へ目を向けている。かなり難しい話になるが、最終回ということでご容赦いただきたい。今回は一般向けの内容ではないので、ハードウェアに興味のある方に読んでいただければと思う。
■ PS2の全体構成図
図1はPS2のブロックダイアグラムだ。なお、各バスラインに書き込まれた数値はそのバスのビット幅を表わしている。また、RDRAMやSDRAMのところに記載された容量値はそのチップのサポート可能な最大容量を示す。
【図1:Playstation2のブロックダイアグラム】
【Playstation2概要仕様書】
CPU | 128ビット“Emotion Engine” |
クロック周波数 | 300MHz |
キャッシュ・メモリ | 命令:16KB、データ:8KB+16KB(SP) |
メイン・メモリ メモリ容量 | ダイレクト・ラムバス(Direct RDRAM) 32MB |
メモリバス・バンド幅 | 3.2GB/秒 |
コプロセッサ | FPU(浮動小数点乗加算器×1、浮動小数点割算器×1) |
ベクトル演算ユニット | VU0+VU1(浮動小数点乗加算器×9、浮動小数点割算器×3) |
浮動小数点演算性能 | 6.2GFLOPS/秒 |
三次元CG座標演算性能 | 6600万ポリゴン/秒 |
圧縮画像デコーダ | MPEG2 |
グラフィックス | “Graphics Synthesizer” |
クロック周波数 | 150MHz |
DRAMバス・バンド幅 | 48GB/秒 |
DRAMバス幅 | 2560ビット |
ピクセル構成 | RGB:Alpha:Z(24:8:32) |
最大描画性能 | 7500万ポリゴン/秒 |
サウンド | SPU2+CPU |
同時発音数 | ADPCM:48ch(SPU2)+ソフト音源数 |
サンプリング周波数 | 44.1/48KHz |
IOP | I/O Processor |
CPUコア | Playstation CPU |
クロック周波数 | 33.8/37.5MHz |
Sub-BUS | 32ビット |
入出力 | IEEE-1394、USB |
通信ポート | PCカード(PCMCIA)で対応 |
メディア | CD-ROM/DVD-ROM |
Emotion Engine(以下EE)はPlaystaionの心臓部、頭脳に相当し、パソコンで言えば、CPUの役割を果たす部分だ。メインバスは128ビットだが全ての周辺I/Oと128ビット接続されているわけではなく、I/Oプロセッサとは32ビット、Graphic Synthesizerとは64ビット、RDRAMとは16ビット×2CHで接続されている。この2CH構成はインテル系PC向けの最新チップセットであるi840と同等と言うことになる。
一方、グラフィック表示を司るのがGraphic Synthesizer(以下GS)で、パソコンで言えば、3Dビデオアクセラレータチップに相当するところだ。EE内部で行なわれた演算結果をダイレクトにGSへ流し込む機構になっており、汎用性に重きをおいたパソコンのアーキテクチャとは違い、徹底したリアルタイム3D CG向けの設計が施されている。
I/Oプロセッサ(以下IOP)はIEEE-1394、USB、PCMCIAといった様々な周辺デバイスとのやりとりを担当するプロセッサだ。パソコンで言うところのSouthBridgeに相当するといっていいだろう。IOPはPS2ネイティブで動作させているときはI/Oプロセッサとして活動するが、PS1互換モードで動作しているときにはCPUとして活動する。その場合のメインメモリとしてはIOPに32ビット幅で接続されたSDRAM部分が使われるようだ(推定容量2MB?)。
PCMCIAインターフェイスはPCカードスロットのインターフェイスだが、これは意外にもCardBusのような32ビットバスではなく、16ビットタイプが使われている。
サウンドプロセッサ(SPU2)は基本的にはPS1のものを性能強化したものが使われており、サウンドチップ自体の基本機能は同じ。音源方式もADPCM。ただし同時発音数は2倍の48声に高められている。ソフトウェア側でチャンネルミキシングダウン処理を行なえばそれ以上の同時発音数や、あるいはMIDI音源のようなウェーブテーブル音源も実現可能となっている。また、PS2はにはデジタルオーディオ出力端子として光デジタル出力端子が1基実装されており、ここヘの出力もこのSPU2が担当している。
■ Emotion Engineのアーキテクチャ
「EEはPS2の頭脳でありながら心臓部でもある」と表現したのには理由がある。図2を見てもらうと分かるが、EEはCPUとしての機能だけでなく、コントローラやインターフェイスの機能を併せ持っているのだ。こちらは、パソコンで言うところのNorthBridge(いわゆるシステムコアロジックとかチップセット)に相当する機能を持っているわけだ。
以下では、ひとつひとつ各機能ブロックを見ていくことにしよう。
【図2:Emotion Engineの基本デザイン】
I/OインターフェースはIOPとのやりとりを担当する部分だ。
RDRAMインターフェースはPS2のメインメモリとなるRDRAMとのやりとりを担当している部分。PS2のメモリシステムは2CH構成のRDRAM 400MHz DDR(いわゆるPC800相当)なので、メモリ帯域は理論値で3.2GB/秒に達する。現在主流のインテル440BXベース用のPC100 SDRAMが0.8GB/秒、同i820用のRDRAMが1.6GB/秒であることを考えるとかなり先進的だと言える。
IPUはMPEG2をデコードするための実行ユニットだ(図3参照)。IPUがサポートするMPEG2デコード処理はジグザクスキャンやIDCT(逆離散コサイン変換)、色差変換処理、4×4ディザ処理など。IPUはMPEG2デコードを一手に引き受けており、MPEG2のパケットを送ってやると、デコードした結果を直に返してくれるインテリジェントなブロックになっている。これにより、MPEG2で圧縮されたアニメーションをテクスチャマッピングするという、現在のパソコンのグラフィックシステムではできないことも可能となっている。
【図3:IPUはMPEG2をデコードするための実行ユニット】
DMAはCPUとは独立して動作するメモリ転送を受け持つコントローラで、EEにはこれが10個分インプリメントされている。具体的には図4のような使われ方をしており、ありとあらゆるデータ転送にDMAが介入してくるといった印象だ。DMAというとすぐにバスを占有するデータ転送を行なうバースト転送を連想してしまうが、PS2のシステムでは128ビット×8個の固定サイズパケットでやりとりされるシステムになっており、CPUの実行を阻害することはない(いわゆるサイクルスチールモードのようなもの)。
【図4:Playstation2のデータ転送概念図】
PS2のCPUというとイメージ的にはEEと言ってしまいがちだが、実質的にはIU0、IU1、FPUと言った部分がCPUに相当する部分になる(図4においてCPUと表記しているのはこの部分に相当する)。この部分はいわゆるMIPSベースの浮動小数点演算プロセッサ付きRISCプロセッサだ。非常に乱暴な表現だが、3Dゲームじゃない2Dゲームなどでは後述するVPUは使わないでこの部分だけで事足りてしまうかもしれない。
CPUコアは2ウェイスーパースカラの構成。64ビット整数演算ユニットを2基持っている。パイプラインステージ数は6だ。
加減積算といった基本的な整数演算は同時に2命令の実行が可能で、それ以外でも、同種のユニットを使わない組み合わせや分岐命令同士の組み合わせ以外は殆ど制約なく同時実行が可能となっている。また、64ビット2基の整数演算器は1基の128ビットのSIMD演算器としても機能するのが面白い。
一次キャッシュは命令キャッシュ16KB、データキャッシュ8KBの構成で、管理方式は2ウェイセットアソシエィティヴ。目新しいのはスクラッチパッドRAM(SPR)で、PS2システムの高速化に非常に貢献しているシステムだ。これの具体的な使われ方については後述する。
そしてEEの最もセンセーショナルな部分がベクトル演算器VPUだ。ブロックダイアグラムで見ると、CPUコアに対してコプロセッサのFPUと同じように「外付け」で接続されているが、こちらはCPUコアとは独立してレンダリングエンジンとして活動することができるようになっている。これはPS1や現在のパソコンのシステムのようなCPUがジオメトリセットアップに奔走させられる仕組みと比べると革新的だ。
VPUはVPU0、VPU1の2基があり、それぞれがある意味1つのCPUと言ってもいいくらい高度な作りになっている。VPU0とVPU1の基本演算機能は同じだが、VPU1の方にはジオメトリ演算系を支援する演算器EFUを含んでいる。
さて、このVPUでは主に浮動小数点を行なうことになるのだが、浮動小数点演算器ならばCPUコアのFPUにもある。では一体VPUではどんな計算を実行するのか。これはずばり、3D系処理で頻繁に発生する4×4の行列計算だ。1基のVPUでは、下に挙げるような計算が1クロックでできるため、4×4の行列の積算はわずか16クロックでできるのだ。
x3=x0*x1+x2
y3=y0*y1+y2
z3=z0*z1+z2
w3=w0*w1+w2
こうした事ができるのもSIMD-VLIWアーキテクチャを採用しているためで、実際には128ビットのレジスタに32ビット長の浮動小数をx,y,z,wの各フィールドに分けてストアさせて演算を行なわせている。
1基のVPUでこれだけの性能があるのに、これが2基あるというのだから、なかなかすごそうだ。なお、ソニー側の資料だが、Pentium IIIと浮動小数点演算性能を比較したグラフがあるので図5で参考までに示しておこう(ちなみに、整数演算ではPentium III 500MHzの方が速い)。
【図5:EEとPentium III 500MHzの浮動小数点演算性能比較】
ところで、この2基あるVPUはそれぞれどのように使われるのか。これは動かすプログラムに合わせて2通りの使われ方が用意されている。その方法の概念図が図6だ。
【図6:VPUのデータ転送概念図】
(a)は「パラレルモード」でVPU0とVPU1に全く別の描画リストを処理させることができるため、レンダリングエンジン側から見れば、非常にコンスタントに結果がもらえる方式だ。VPU0は処理した結果をスクラッチパッドRAM(SPR)に格納しておき、レンダリングエンジンはVPU1からデータが来なくなったらSPRの方から結果を取り出す……というような手順で処理が進む。
(b)は「シリアルモード」で、VPU0はVPU1のプリプロセッサとして働かせるモードだ。この場合、VPU0の演算結果はSPRに格納され、VPU1が暇であればそのままその結果を受け取ってさらに演算を進め、VPU1が忙しくてすぐに処理できない場合はVPU0の演算結果はSPRにしばらく保存される。SPRが満杯になってしまった場合は今度はメインメモリ側の2次バッファに結果を退避する。
CPUコアにあるSPRはこのようにも使われるのだ。なお、SPRはCPUの命令実行サイクルとは無関係にDMAがアクセスできる仕組みになっているため、かなり高い並列性をもって描画エンジンが活動できるようだ。
■ Graphic Synthesizerのアーキテクチャ
GSはパソコンで言うところのビデオカード(ビデオチップ)に相当する部分だ。パソコンの3Dビデオチップを見慣れている人間からすると、意外にもGSは「普通」な仕様なので、あまりため息が漏れるようなトピックは少なかったりする(そうはいっても、最新のパソコンの3Dビデオチップクラスの潜在能力は持っているので侮ることはできないのだが)。それこそ、ライバル機のセガ・ドリームキャスト(DC)と比べ、できることはさほど変わらない。
【Graphic Synthesizerの概要仕様】
Graphic Synthesizerの仕様 |
GSコア | DRAM内蔵並列描画プロセッサ |
クロック周波数 | 150MHz |
ピクセル・エンジン数 | 16並列 |
混載DRAM容量 | 4MB@150MHz |
総メモリバンド幅 | 48GB/秒 |
内部総データバス幅 Read Write Texture | 2560ビット 1024ビット 1024ビット 512ビット |
最大表示色数 | 32ビット(RGBA:各8ビット) |
Zバッファ | 32ビット |
画像処理機能 | Texture Mapping、Bump Mapping、Fogging、Alpha Blending、Bi-/Trilinear Filtering、MIPMAP、Anti-aliasing、Multi-pass Rendering |
画像出力フォーマット | NTSC/PAL、DTV、VESA(最大1280×1024ドット) |
プロセス | 0.25ミクロン |
総トランジスタ数 | 43MTr. |
ダイサイズ | 279平方ミリメートル |
パッケージ | 384ピンBGA |
描画性能 |
ピクセル・フィルレート | 24億ピクセル/秒(Z,A) 12億ピクセル/秒(Z,A,T) |
パーティクル描画性能 | 1億5000万個/秒 |
ポリゴン描画性能 | 7500万個/秒(微小ポリゴン) 5000万個/秒(48pix四角形、Z,A) 3000万個/秒(50pix三角形、Z,A) 2500万個/秒(48pix四角形、Z,A,T) |
スプライト描画性能 | 1876万個/秒 |
GSは150MHzで駆動され、ビデオメモリ(VRAM)もコアに内蔵され同じく150MHzで駆動されている。ビデオメモリ容量は4MBで、最近のパソコン用の主流のものと比べると8分の1程度しかないことになる。VRAMの容量不足は各方面からPS2の唯一の弱点だと言われている部分だ。
ちなみにライバル機のドリームキャスト(DC)はビデオメモリは8MBだから、「DCの半分しかない」と言うことになる。しかし、メインメモリはDCの2倍あり、さらにメモリバスシステムが非常に強力なのでパソコンで言うところのAGPライクな活用をしてテクスチャを切り換えていけばこの部分は弱点とならない……と言う見方もあるようだ。
さて、GSの内部アーキテクチャは非常にアグレッシブで先進的だ。ピクセルエンジンはなんと16並列構成。1クロックあたり16ドット分のレンダリングができる……ということだ。コアエンジンとビデオメモリとは読み込み、書き込み、それぞれ独立した1024ビット幅の超ワイドな専用バスで接続されており、メモリバンド幅は48GB/秒にも達する。この点は現在のパソコンの3Dビデオチップを凌駕していると言っていいだろう。テクスチャ専用のデータバスも512ビット分独立で用意してあるところもちょっとユニークだ。
1ピクセルは総64ビットで構成され、内訳はRGB各8ビット、α属性(≒透明度)8ビット、Zバッファ32ビットとなっている。これだと640×480の解像度で表示させたときに4MBのビデオメモリの大部分をフレームバッファで消費してしまうことになり、3Dゲームで欠かせないダブルバッファが取れないことになってしまう。しかし実際には640×240のインターレース表示を行なっているようで、これによってダブルバッファを確保できていると思われる。しかし、インタレース表示、すなわちテレビへの出力を第一に想定してしまっているあたり、「やっぱりゲーム機はゲーム機」と感じさせられずにはいられない。
ただし、1ピクセルの各属性の内訳は可変構造になっているようで、GS自体は最大1280×1024の解像度の出力にも対応している。3Dゲームは無理だとしても、アドベンチャーゲームやRPGなどでは、ノンインタレース表示の高解像表示に対応したものも出てくるかもしれない。
最後にGSのスペックシートの描画性能の解説もしておこう。
ピクセルフィルレート
ドットを書き込む性能。スペックシートに書かれているZ,AとはZバッファ、α属性も考慮したドット描画性能であることを示唆している。
パーティクル(粒子)描画性能
これもドット描画性能だが、パーティクル描画時には16並列のピクセルエンジンが同時に働かないケースがあるためピクセルフィルレートよりは低めの性能値になっている。単純に性能値もピクセルフィルレート値の1/16になっているのもその証だ。
ポリゴン描画性能
PS2のGSは16並列のピクセルエンジンが並列に動けるようにと、入出力ともに1024(64ビット×16並列)ビットのバス幅を設定している。一方、テクスチャ用はその半分の512ビットで、テクスチャを張り付けたときの描画性能の落ち込みはここから来ているものと推察される。
48ピクセルポリゴンのテクスチャマッピング「あり」時の描画性能値が、「なし」のときの丁度1/2になっているのはその証(スペックシートのTとはテクスチャマッピングありを意味している) 。
スプライト描画性能
実はGSにはいわゆるスプライト機能という特別な機能は存在せず、テクスチャを張り付けたポリゴンでスプライト表現を行なう。
スペックシートの「8×8(64ピクセル)スプライト描画性能=1875万個」という値だが、これを48ピクセルの場合に換算すると(1.33倍すると)丁度テクスチャマッピングをした48ピクセルポリゴンの描画性能と一致する。
◎関連URL
Playstation2のホームページ
http://www.scei.co.jp/ps2/index3.html
(西川善司)
(2000/3/24)
|