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

ゲーム向けに独自拡張されたXbox 360のCPU




●極めてシンプルだったXbox 360のCPUコア

Hot Chipsが開催されたスタンフォード大学メモリアルオーディトリウム
 Microsoftが、次世代ゲームコンソール「Xbox 360」のCPUの、技術的な概要を明らかにした。米パロアルトで2005年8月14〜16日に開催されたチップ関連シンポジウム「Hot Chips 17」で発表された。Microsoftは、これまでGPU側のアーキテクチャ概要は明らかにしていたが、CPUの概要は公式には明らかにしていなかった。

 Xbox 360 CPUは3コアを載せたマルチコアCPU。PowerPCアーキテクチャの独自拡張で、3.2GHzで動作する。各CPUコアは、2命令発行(issue)/サイクルのインオーダ(in-order)コア、つまり、最大2命令を命令順序の通りに実行する、極めてシンプルな構造だ。ただし、1命令で複数データを処理できるSIMD(Single Instruction, Multiple Data)演算については大幅に機能が強化されている。また、ゲームとグラフィックス、ストリーミング型の処理に特化した命令拡張や機能拡張も行なわれている。

 Xbox 360 CPUの2命令発行インオーダコアという点は、ソニー・コンピューターエンタテインメント(SCEI)の次世代ゲームコンソール「PLAYSTATION 3」の中核CPUコアである「PPE(Power Processor Element)」と同様だ。ちなみに、PC向けのPentium 4は3内部命令(uOPs)/サイクルでアウトオブオーダ(out-of-order)コア、つまり、最大3命令を命令順序に関係なく、実行できる命令から実行する複雑な構造となっている。MicrosoftもSCEも、いわゆる汎用コンピューティング(整数演算や制御中心)については、PC向けCPUほどの性能はいらないと判断したことになる。

●整数ユニットは控え目、SIMD/浮動小数点ユニットはリッチ

公開されたXbox 360 CPUの構成
 Xbox 360 CPUが搭載している実行ユニットは、下の7ユニット。

・整数ユニット(Integer Uint)
・ロード/ストアユニット(Load/Store Uint)
・分岐ユニット(Branch Uint)
・VMX浮動小数点ユニット(VMX Floating Point Unit)
・VMX置換ユニット(VMX Permute Unit)
・VMXシンプルユニット(VMX Simple Unit)
・スカラ浮動小数点ユニット(Scalar Floating Point Unit)

 VMXは、Motorola系PowerPCの「AltiVec」と互換のベクタ(SIMD)演算機能だ。しかし、Hot Chipsでプレゼンテーションを行なったMicrosoftのXbox Semiconductor Technology GroupのJeff Andrews氏によるとXbox 360 CPUでは「ゲームとグラフィックスに特化した独自の拡張が行なわれている」という。

 構成を見ると、浮動小数点演算への偏重がよくわかる。整数演算系は1サイクル1命令の非常に簡素な構成だ。それに対してSIMD演算のVMXは3ユニット、それに加えてスカラの浮動小数点ユニットを備えるリッチな構成だ。

 また、Xbox 360 CPUは、マルチスレッディング機能を備える。各CPUコアがそれぞれ、最大2スレッドをコンテクストスイッチなく実行できる2wayのマルチスレッディングをハードウェアでサポートする。3コア合計で、最大6スレッドを実行可能だ。ただし、同じマルチスレッディングでもPentium 4のHyper-Threadingとは異なり、異なるスレッドの命令を1サイクルに混在させて実行することはできない。Xbox 360 CPUは、サイクル単位でスレッドを切り替えて実行するファイングレインドマルチスレッディング(Fine-Grained Multitheading)を実装する。これは、CellのPPEと同じだ。

Xbox 360 CPU詳細構成図(一部推定)
PDF版はこちら

●実行ユニット群は2グループに

 命令フローで見ると、まず32KB 2-wayのL1命令キャッシュがある。命令は、L1命令キャッシュからインストラクションユニット(Instruction Unit)にフェッチされる。インストラクションユニットは、命令フェッチ、命令のキューイング、命令デコードとディスパッチを行なうと見られる。

 Hot Chipsのプレゼンテーションではインストラクションユニットに分岐ユニットが付属するように描かれていた。そのため、Xbox 360 CPUは、旧来のPowerPCが備えていた、インストラクションユニットと一体化された分岐ユニットを備えていると推測される。インストラクションユニットに付属した分岐ユニットは、以前はPowerPCの特徴だった。

 実行ユニット群は図中では大きく2グループに分離されている。ひとつは整数ユニットとロード/ストアユニットのパイプ。もうひとつは、VMXユニット群とスカラ浮動小数点ユニットのグループ。後者にはVSU(Vector/Scalar Units?)という名前がつけられている。VSUに対しては、VIQと呼ぶユニットがインストラクションユニットに付属している。これは「VSU Instruction Que」、つまりVSUユニットに対する命令キューだと推測される。Hot Chipsでの発表でも、ベクタ/スカライシューキューが分離されていると説明されていた。

 ロード/ストアユニットは、32KB 4-wayのL1データキャッシュを管理する。当然、メモリアドレッシングのための「MMU (Memory Management Unit)」も備える。

 3コアは、アクセスの調停を行なうクロスバー&データキューを介して共有の1MBのL2キャッシュにアクセスする。L2は8-wayセットアソシエイティブで、後述するデータストリーミングのために、ロック機能を備える。

●ゲームコンソール向けにVMXとキャッシングを拡張

 Xbox 360 CPUのVMXユニットは、Microsoft向けの独自拡張「VMX128」が加えられている。

 通常のPowerPCのVMXとの最大の違いは、レジスタの拡張で、従来32本だったVMXレジスタはXbox 360 CPUでは128本に拡張されている。128本というレジスタ本数は、Cellのデータ処理CPUコア「SPE(Synergistic Processor Element)」と同じだ。Cellの場合は、ループアンローリングなどソフトウェア最適化に必要なために128本のレジスタに拡張されたと説明されていた。Xbox 360 CPUのVMXのレジスタ拡張も、同様の理由だと推定される。ただし、Xbox 360 CPUの場合は、各CPUコアがマルチスレッディングをサポートするため、実際には各レジスタセットは2面ずつあり、VMXレジスタも物理的には256本/コア存在する。

 Xbox 360 CPUのVMXは、全ての実行ユニットが4-way SIMDとなっている。また、独自の拡張命令が加えられている。カスタムのドットプロダクト(内積)命令と、D3D(Direct3D)の圧縮データフォーマット群をサポートする命令群だ。「D3D圧縮フォーマットのネイティブなサポートにより、データはほぼ1/2になる。このフォーマットはGPUと共通化されている」とMicrosoftのJeff Andrews氏は説明する。CPU→GPU間のデータ量を減らすことで、FSB(フロントサイドバス)帯域の圧迫を軽減する。また、ロード/ストア系命令にも拡張が加えられている。

 また、Xbox 360 CPUは、「CPUデータストリーミング(CPU Data Streaming)」と呼ぶ、データ転送のメソッドを備える。「我々はキャッシュスラッシング(Cache Thrashing)を最小に抑える広帯域のデータストリーミングを備える」(Andrews氏)。これはゲームに多用されるストリーミング型のデータ処理、つまり、小さなプログラムピースで、連続的に大量データを処理するタイプの処理に特化したデータ転送だ。ストリーミング型の処理の場合、再利用されないデータが極めて多く、それをキャッシュしてしまうと、キャッシュがすぐに飽和してしまう。ゲーム向けCPUの場合、これは大きな問題となる。そのため、Xbox 360 CPUでは特殊なデータ転送の仕組みで、解決する。

Xbox 360 CPUのキャッシュドデータストリーミングの例
PDF版はこちら

●ストリーミングデータでのキャッシュのスラッシングを防ぐ

 Hot Chipsでは典型的なストリーミングでのデータ移動の例が示された。

 まずデータのロードでは、データキャッシュブロックタッチ(xDCBT:Data Cache Block Touch)命令でのプリフェッチを行なう。データは、L2キャッシュをバイパスしてメインメモリからL1データキャッシュに直接取り込まれる。L2キャッシュに再利用しないデータがキャッシングされることを防ぐ。

 L1からロードされたデータはVMXユニット群で処理され、D3Dフォーマットで圧縮される。圧縮されたデータはロード/ストアユニットによりストアされる。Xbox 360 CPUではL1データキャッシュはライトスルーモードになっている。L1にはライトはアロケートされず、データ書き込みはL1にヒットしないため、L1に書き込むことなく、L2に書き込まれる。つまり、L1はバイパスされ、L2にだけデータが書き込まれるため、再利用されないデータがL1データキャッシュを埋めるのを防ぐことができる。

 ストリーミングデータは、VMX128での拡張命令によりL2キャッシュ上の「ライトギャザリングバッファ(Write Gathering buffers)」領域に格納される。ライトギャザリングバッファはCPUから読み出すデータが一定量まとまるように設定されたバッファ領域。FSB帯域を無駄なく使えるように、転送データの集合化を図る。バッファはロックされ、上書きされないようになっている。ストリーミングデータは、いったんこのバッファで128Byte単位ずつまとめられる。Xbox 360 CPUでは、キャッシャブルな非シーケンシャルなライトギャザリングバッファ(cacheable, non-sequential write gathering buffers)が各コア毎に8個ずつ、非キャッシャブルなライトギャザーバッファ(uncacheable write gathering buffers)が各コア毎に4個ずつ設定できる。

 Xbox 360 CPUは「XPS(Xbox Procedural Synthesis)」と呼ばれる、Xbox 360 GPUとの密接な連携機能を備える。具体的には、Xbox 360ではGPUがCPUのL2キャッシュに直接アクセスができるようになっている。ストリーミング処理の場合は、GPUがCPUのL2上のライトギャザリングバッファに直接アクセス、128Byte単位で読み出すことができる。データをCPUのL2にバッファリングしておき、GPUが最適なタイミングでデータを転送できるわけだ。

 効用は、データをいったんメインメモリ上に格納して、そこからGPUが読み出す手間を省くことができること。無駄なメモリトラヒックをなくすことで、メモリ帯域を節約できる。また、GPUがCPU上のキャッシュに対して、ローレイテンシのライトバックを行なうこともできる。

 こうして見ると、Xbox 360 CPUは、Powerアーキテクチャでありながら、ゲームのワークロード向けにかなりカスタマイズされていることがわかる。これは、Pentium IIIをほぼそのまま使った初代Xboxの時とはかなり違う。しかし、フロムスクラッチで作り上げたCellと比べると、拡張は比較的小幅でラディカルではない。VMXレジスタの拡張を除けば、比較的、ダイ(半導体本体)エリアを取らない拡張で、有効な処理を狙っているように見える。

□HOT CHIPS 17のホームページ(英文)
http://www.hotchips.org/hc17/
□関連記事
【6月2日】【海外】Xbox 360のキーパースンJ Allard氏に聞く(前編)
http://pc.watch.impress.co.jp/docs/2005/0602/kaigai184.htm
【6月3日】【海外】Xbox 360のキーパースンJ Allard氏に聞く(後編)
http://pc.watch.impress.co.jp/docs/2005/0603/kaigai185.htm
【5月14日】【海外】ベールを脱いだ「Xbox 360」
http://pc.watch.impress.co.jp/docs/2005/0514/kaigai178.htm
【5月26日】【海外】Xbox 360から見えるUnified-Shader時代のGPUの姿
http://pc.watch.impress.co.jp/docs/2005/0526/kaigai183.htm

バックナンバー

(2005年8月22日)

[Reported by 後藤 弘茂(Hiroshige Goto)]


【PC Watchホームページ】


PC Watch編集部 pc-watch-info@impress.co.jp ご質問に対して、個別にご回答はいたしません

Copyright (c) 2005 Impress Corporation, an Impress Group company. All rights reserved.