【Watch記事検索】
最新ニュース
【11月30日】
【11月29日】
【11月28日】
【11月27日】
【11月26日】

西川善司の3DゲームファンのためのPS3パフォーマンス考察講座
~PS3はSPEで加速する! SPEがなければ性能はPentium 4の1/5以下?

Sony Computer Entertainment America、Developer Support Engineer、Geoff Audy氏
3月20日~24日(現地時間) 開催

会場:San Jose McEnery Convention Center

 今回は「Game Developers Conference(GDC) 2006」で開催されたPlayStation Universityをはじめとしたプレイステーション 3(PS3)関連セッションで示された各種セッションやプレゼンテーションからPS3がどのようなパフォーマンスを発揮するのかを考察してみたいと思う。


■ PS3のパフォーマンスはSPEが握っている

 PS3を支える根幹技術はBlu-Rayドライブ、グラフィックスを司るRSX、CPUであるCELLプロセッサの3点に集約されると思う。Blu-Rayは50GBの大容量性とハイビジョン画質の映像を身近なものにするわけだが、既にハイビジョンは放送では身近なものになっているし、50GBという容量も数倍の容量のハードディスクがローエンドPCにも搭載されているのでイメージはしやすい。RSXについても前回述べたようにPC用グラフィックスプロセッサ(GPU)であるGeForce 7800 GTXと設計を同じくするためにそのポテンシャルは想像の範囲内だ。

 問題はCELLだ。とくに7基搭載され、うち6基が自由用途として提供される128ビットのSIMD型ベクトルRISCプロセッサ「SPE(Synergistic Processor Elelement)」が謎めいている。一体なにができてどのくらいのパフォーマンスなのか。

 前回述べたように、SPEは256KBのローカルストアと呼ばれるL1キャッシュ並みの速度で動作する高速なSPEにとってのメインメモリにてデータを取り扱いプログラムを走らせる。SPE自身はメインメモリや複数ある自分以外のSPEのことを気にせず、文字通り完全独立並列動作できるが、メインメモリや他のSPEとの連携にはMFC(Memory Flow Controller)のDMA(Direct Memory Access)を介さなければならず、このレイテンシが無視できない大きさとなるので、今までのマルチスレッドプログラミングとは異なった設計方針が必要になるのだ。

各SPEはメインメモリ、ビデオメモリ、そして他のSPEのローカルストアにDMA経由のバルク単位のメモリアクセスが可能。レイテンシは大きくランダムアクセスはやってできなくないが現実的でない 各SPEはメインプロセッサともいうべきPPE(Power Processor Element)との連携も可能


 それではSPEを具体的にどのように活用することができるのだろうか。

 なお、PS3におけるSPEの動作モードについてはここで一度解説しているので、ここではそれ以外のことについて見ていく。

(筆者注:PPEの中にあるプロセッサコアがPPU、SPEの中にあるプロセッサコアがSPUなのだが、登壇者や各スライドによって同義に扱っている場合がある。PPU→PPE、SPU→SPEと読み替えて貰っても問題はない点に留意されたし)

SPEのプログラミング自体はC/C++が利用でき、さらにベクトル演算用の変数型の拡張が行なわれていたり、インライン機械語マクロが利用できたり……と、プログラミング環境自体は痒いところにもちゃんと手が届きそうで悪くない


■ SPEにもグラフィックス処理をさせるという発想

SPEをグラフィックス描画の助っ人に起用する
 SPEを物理エンジンや経路探索などのAI処理などに使うのが理想なのだろうが、SPEは6基も使えるので局面によっては余ることもあるだろう。そんなときに有効なのがSPEをグラフィックスチップのRSXと連携させるアイディアだ。

 SPEは優秀なベクトルプロセッサであるため3Dグラフィックス処理も問題なく行なえる。

 セッションで示されたのはSPEでレンダリングのための事前準備をRSXと平行して行なってしまうというもの。

 実際のピクセル描画のレンダリングはRSXで行なうとして、その前のスキニングをはじめとしたジオメトリ変形処理をSPEでやってしまえばいい。

 あるいは、この発想をもっと発展させて、SPEで、視点からの距離に応じたテッセレーション処理(ポリゴンの自動分割。サブディビジョン)や、キャラクタを別のものへ変形させていくモーフィング処理のようなジオメトリを増大させる処理系も可能だろう。SPE、一基だけでは重荷かも知れないが。

3Dゲームにおいて、CELLとGPUを連携させるというのはPS3ではほぼ当たり前の開発スタイルとなりそうだ
 また、SPEはDMAを介してビデオメモリへのアクセスも可能なので、この機能を活用してSPEに、RSXでレンダリングした映像のポストプロセスを行なわせるというアイディアもある。RSXでレンダリングしたフレームを直接は表示せずにSPEに廻し、HDR(ハイダイナミックレンジ)レンダリングされたフレームに対してのグレア処理や被写界深度のデフォーカス処理、カメラスピードに応じたブラー処理など、フォトショップ的なレタッチ処理をSPEで行なってから出力するようにする。SPEがこの作業をしている間、RSXは並行して次のフレームのレンダリングに取りかかるようにすればチューニング次第ではパフォーマンスが向上するだろう。ただし、この方法では実際の表示までに1フレームのレイテンシが発生するのでゲームのタイプによっては実用が難しいかも知れない。


■ SPEの仮想化とSPEの活用スタイル

2つのSPEの仮想化ソリューション
 アプリケーションで使えるSPEは6基のみ。ということは6個のタスクしか処理できないのだろうか。

 この点、PS3は新世代のゲーム機らしく、SPEを仮想化する仕組みを実装しているので問題がない。

 PS3のシステム側より提供されるSPEの仮想化ソリューションは2つ。

 1つは「SPEスレッド」というモード。これはOSが(≒PPE:Power Processor Element。PowerPC 970互換のCELLのメインプロセッサ)、実行待ちのタスクの優先順を吟味しつつ、手の空いているSPE達に対して発注を行なうモードだ。各スレッドには「優先順位」と「幾つのSPEを使うことになるのか」という情報が持たされていてPPEはこれを吟味する。SPEへのタスク発注時にはプログラムとデータがDMAを介して各SPEに配信されることになる。これは丁度、この記事で解説したジョブ・キュー・モードをPS3で実装した形態だ。

こうした3つのSPEスレッドがあるときに…… 優先順位の高いスレッド1がまず空いているSPEに対して発注される。続いて本当は優先順位の高いスレッド2を発注したいがあまったSPEは3基しかなくて発注できず 優先順位は低いが丁度空いているのでスレッド3を発注
スレッド1が終わってやっとスレッド2を実行できるだけのSPEに空きが出た スレッド2を実行

SPURSカーネル部分はライブラリによって提供されるのでプログラミングの難易度は低減されたようだ
 もう1つは「SPURS(SPU Runtime System)」というモード。これはPS3開発ライブラリによって提供され、SPE自身が自発的に走るモードだ。SPE自身で小さなカーネル(マイクロOS)を走らせ、ここに予め、「どこにあるデータを」、「どういう処理をして」、「どこに出力するか」という設定をしておき、これに従ってメインメモリ上にあるプログラムとデータをDMAを介して取ってきて処理していくという仕組み。PPEを介さず高い独立性を持ってSPEを動作させることができるのが特徴で、この記事で解説したセルフ・マルチタスキング・モードをPS3で実装した形態だ。

 こうしたSPE駆動モードを用いて、一体何がSPEに任せられる仕事なのかが、あくまでアイディアの提供という範囲でだが、具体的に示された。

ゲームプログラムのブロックダイアグラム。ハイライトされているのはSPEに“不向きな”処理系。周辺機器制御やゲームロジック(Scripting)はPPEの方の仕事になる ベクトルや行列の方程式、フーリエ変換、スプライン補完といった数学はSPE向き パケット処理、送受データの圧縮/展開、暗号/複合といった処理系はSPE向き
音声の音高調整、立体音響処理、音声認識といった音声信号処理から、MP3、OGG、AC3といったコーデック処理もSPE向き カメラの起動制御、視界に対しての事前クリップ処理などもSPE向き アニメーション処理の際のモーションとモーションの間の補完処理はSPE向き
メニューやゲーム画面にオーバーラップされる照準などのHUDの処理は独立性が高いからSPE向きか A*のような経路探索、AI処理、群集シミュレーションはSPE向き 効果物理としての同時多発的に行なわれるパーティクル挙動計算などはSPE向き
文字列表示やベクトルフォント処理などもSPEで行なえる? 物理。もしかすればSPEの花形的タスク。衝突判定、布シミュレーション、流体シミュレーションなどいろいろとできそうだ RSXのお助けマンとしてグラフィックス処理をSPEで行なうのも一般化するはず。主にジオメトリ処理で活躍しそうだ


■ CELLのパフォーマンスはどのくらい?

IBM、Emerging Systems Software、Senior Technical Staff Member、Bruce D'Amora氏
 さて、CELLにおいて(というかPS3において?)SPEの活用が重要であるということを再三訴え続けているSCEとIBMであるが、実際にCELLはどのようなパフォーマンスを発揮するのだろうか。

 このあたりのことについてはIBMからいくつかのデータが示された。

 1つは160万個と500万個のパーティクルの物理挙動シミュレーション付きレンダリングを行なった時のパフォーマンステストの結果だ。

上が160万、下が500万パーティクルテストの結果
 使用されたCELLは開発途中版であったために動作クロックは2.1GHz駆動、そして2WAY-CELL(CELL×2)におけるSPEが16基のケースも示されている。なお実験用のCELLなのでPS3とは違い8基のSPEが全てアプリケーション側で動作できるものを使用している。

 そして比較対象はPentium 4の3.2GHz版。計測データは描画完了するまでの所要時間で、その最小値と最大値と平均値。フレームレートではないので値が小さいほど優秀であることを示している。

 160万パーティクル、150万パーティクル、いずれのケースにおいても、SPE1基でPentium 4の1.5倍、SPE8基では12倍のパフォーマンスを見せている。

 続いて、示されたのは画像処理のパフォーマンスだ。定点監視カメラなどにおいて背景を除外して動体のみを出力する画像処理を行なったケースのフレームレート計測値ではSPE1基のケースでPentium 4に辛うじて勝っているという程度だが、8基ではPentium 4の9倍のスコアを記録している。

リアルタイム映像から背景映像を差っ引いて動体だけを出力する映像処理をSPEを使って行なう プリプロセス、顕在性処理、マスク処理、出力構築処理といった各処理を4基のSPE1にて行なう SPE1基で65fps、8基で520fpsだから性能はリニアに向上していることがわかる

 2.4GHz駆動のCELLでAutodeskの開発した布シミュレーションを実装した場合と、同一のものをPentium 4 3.6GHzクラスのCPU(おそらくAthlon64 3600+を指し示していると思われる)で実装した場合との比較では3基のSPEでPentium 4 3.6GHzクラスCPUの2倍のパフォーマンスを記録。注目すべきはSPEを使わないPPE(VMX使用)のみのケースで、この場合はPentium 4 3.6GHzクラスCPUの20%程度のパフォーマンスしか出せていない。この値を見る限りではPPEの浮動小数点ベクトル演算性能は高くない(相当低い?)ということが言えそうだ。

SPEで布シミュレーションをジオメトリレベルで並列処理。グラフィックス出力にはGPU用いた 布シミュレーションの出力結果 SPEの個数に応じて性能が向上。でも、気になるのはSPEを使わないPPEのみのケース。PS3はSPEを使わないとパフォーマンスは出なそうだ
実際の映像
(WMV形式、ZIP圧縮、23.6MB)
複数の箱を回転させてその中の布が自己衝突に配慮して回転する

 また、GPUを一切使わずに、CELLだけで3Dグラフィックス描画を行なうデモも披露した。

 これは16ビットの高さ情報(ハイトマップ)と16ビットの色情報を持つ衛星写真から生成したジオグラフィックデータを元に、レイキャスティング法でレンダリングするもの。ちなみにレイキャスティングとは、描画フレーム面から描画範囲に無数のレイ(≒視線)を放って最初に衝突する場所の色を描画ピクセル色とするようなボリュームレンダリングの基本技法だ。バンプマッピングの発展形である遮蔽視差マッピングにもこの発想が使われている。

 結果は、1基のCELL(8基のSPE)では1,280×720ドットを30fps以上で、2基のCELL(16基のSPE)では1,920×1,080ドットで30fps以上。これだけ見るとRSXのみにグラフィックス処理をさせてもそこそこ行けそうだ。

GPUを一切使わずにCELLのみでレイキャスティング方でジオグラフィックデータをリアルタイム生成 1基のCELL(SPE×8)だけで720p解像度で30fpsを実現
実際の映像
(WMV形式、ZIP圧縮、15.5MB)
CELLのみでレイキャスティングを実行した際の実際のムービー


■ PS3用の新作デモのパフォーマンス

Sony Computer Entertainment America,Research Scientist,Craig Reynolds氏
 GDC2006におけるソニー基調講演で公開された、オモチャのアヒルの新作デモの技術的解説も行なわれ、そのパフォーマンスデータも示された。

 実は、あのデモの主役はアヒルではなく、群れをなす魚の方なのであった。

 あれは、SCEの研究開発グループがSPEで実装した群衆シミュレーションのサンプルデモだったのだ。

 この群衆シミュレーションでは、群れのひとかたまりをバケット(Bucket)という単位で管理し、さらに複数のバケットをひとかたまりとしたラティス(Lattice)という単位で管理している。1フレームごとに自分(この場合は各魚)がどのバケットに属しているかを更新する。さらに同じ種類で固まろうとする個人AIと、群れとしてどう行動するかの集団意志決定を行なう群集AIを動かして、群れの挙動や移動方向を制御している。

 なお、この群衆シミュレーションはPSCrowdとしてPS3の最新開発キットにライブラリとして収録されるそうだ。合わせてこのPSCrowdライブラリの基本デモも公開された。

 こちらのデモもPS3開発機の3.2GHz駆動のCELLベース上で動作させたもの。デモは2種類公開され、真ん中の黒い岩のあるシーンの外周を周回するデモは2Dのスプライトベースの魚の群集デモでこちらは10,000匹の魚に対して群集シミュレーションを行なって60fpsが達成できている。もう1つのカラフルなテクスチャ無しの3Dの魚のデモの方は、36ポリゴンの魚に頂点レベルのアニメーションを適用し、7,000匹の群集シミュレーションを行なって60fpsが達成できているという。

「Chameleon Fish」デモと題された新しいPS3のデモはSPEの威力を群衆シミュレーションに活用したサンプルであった
Chameleon Fishデモの実際の映像
(WMV形式、ZIP圧縮、17.7MB)
PS3の開発キットに提供される群集シミュレーションライブラリのPSCrowdのデモ
(WMV形式、ZIP圧縮、38.9MB)
前半の方が10,000匹の2Dスプライトベースの魚、後半のカラフルな方が7,000匹の36ポリゴンの魚のデモになる

Cheameleon FishデモにおけるPPE、SPE、RSXの各負荷率。これでPS3のパフォーマンスが大体想像付く!?
 あの新作アヒルのデモ(実質、魚のデモなわけだが)は、2種類の魚を5,000匹泳がせており、さらに各群れのAIと各個のAIを動かして群れの意志を採択する処理を行なって30fpsが達成できているという。この群集の管理や群集AIの実行にSPEが利用されているのだ。

 この群集デモの負荷率だが、SPE全体で30%、RSXによるグラフィック描画は15%とかなり余裕があるように見える。一方、PPEの方は84%の負荷率でかなり忙しい。


■ まとめ~PS3はSPE命。SPEがなければXbox 360以下かPS2並?!

 こうしてみてきて、おぼろげに見えてくるのは、CELLが3.2GHzという高クロック動作していながらも、そのメインCPUともいえるPPEにはあまり余裕がないなということ。これは、インオーダー限定の命令実行形態や浮動小数点演算の遅さといった弱点が響いていることなのだろうか。

 GDC2006期間中、何人かの開発者達から「PPEだけだと局面によってはXboxやPS2のCPUの方が速いと感じる」というボヤキを聞いたが、なるほど、こうした結果はそれを裏付けるものかもしれない。

 とはいっても、SPEを効果的に活用した場合には、その不利点を補って有り余る高性能ぶりを発揮する。CPUだけの最大性能に着目すれば、PPE“+”相当のCPU(“+”は拡張VMXの部分)を3基しか持たないXbox 360よりも、もしかすると、PS3の方がパフォーマンスは上かも知れない。が、逆にSPEを活用できなければ、PPE“+”が3基あるXbox 360の方がプロセッシングパワーは上といえるかもしれない。

 PPEがXboxやPS2のCPUより遅いかどうかは別にして、いずれにせよ、SPEをうまく活用してこそ、PS3のパフォーマンスが最大限に発揮されるということだ。

 SPEを制するものがPS3を制するのだ。

 問題はPS3、Xbox 360、それぞれにヘビーカスタマイズしたソフトの相互への移植だ。

 Xbox 360はPCと同じ対称型マルチコアなので、PCで培ってきたこれまでのマルチスレッドソフトウェアの設計技法が活用できるが、PS3ではそうは行かない。PS3の性能を最大に引き出すためには独特のソフトウェア設計方針に従ってSPEをフル活用しなければならず、開発は簡単ではない。また、せっかくSPEをフル活用するマルチスレッドモジュールを開発したとしても、そのままXbox 360に持って行くことは不可能だし、無理矢理実装してもPS3並の性能は得られないだろう。

 PS3とXbox 360のCPUの最大公約数を求めれば「PowerPC 970互換コア一基」ということになる。「ゲームはスペックじゃない」とはいえ、マルチプラットフォームを展開する多くのゲームがこれだけで開発されることになったとしたら次世代コンピュータ・エンターテインメントを夢見るユーザの立場からすれば寂しい。

 幸いグラフィックスはATIとNVIDIAという違いはあるがポテンシャルそのものは両者プログラマブルシェーダ3.0(SM3.0:Shader Model3.0)世代でほぼ同じ。ゲーム開発の立場に立ってみれば、この世代のゲーム機では、このCPUアーキテクチャの差異を吸収する優秀なミドルウェアの重要性が鍵を握るような気がする。


□Game Developers Conference(英語)のホームページ
http://www.gdconf.com/
□Game Developers Conference(日本語)のホームページ
http://japan.gdconf.com/
□ソニー・コンピュータエンタテインメントのホームページ
http://www.scei.co.jp/
□「PlayStation」のホームページ
http://www.playstation.jp/
□関連情報
【3月29日】西川善司の3DゲームファンのためのPS3アーキテクチャ講座
~PS3の開発環境はこうなった
http://game.watch.impress.co.jp/docs/20060329/3dps3.htm
Game Developers Conference 2006 記事リンク集
http://game.watch.impress.co.jp/docs/20060324/gdclink.htm
「プレイステーション 3」記事リンク集
http://game.watch.impress.co.jp/docs/backno/news/ps3link.htm

(2006年3月31日)

[Reported by トライゼット西川善司]



Q&A、ゲームの攻略などに関する質問はお受けしておりません
また、弊誌に掲載された写真、文章の転載、使用に関しましては一切お断わりいたします

ウォッチ編集部内GAME Watch担当game-watch@impress.co.jp

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