|
会場:昭和女子大学 その中で「新しいPhysX」と題されたセッションでは、NVIDIAが本格的に力を入れはじめているGPGPU(General-Purpose computation on GPU: GPUの多目的利用)を主題に、物理エンジン「PhysX」や、NVIDIA仕様のGPGPU処理言語「CUDA」について語られた。基本となる考え方は、GPUの膨大な計算能力を様々な用途に応用することで、これまでCPUで処理していた事柄を劇的に高速化することができる、ということだ。今回のセッションでは、その可能性が実際にエンドユーザーの手に届く範囲に来ていることを、強く実感させるものだった。
■ Geforce 8シリーズ以降のGPUで実行可能になった「PhysX」のパワー
しかし従来のGPGPUの応用は、グラフィックスの生成に使う機能を言わば裏技的に利用するというもので、ごく狭い範囲の活用にとどまっていた。というのは、GPUを利用するためのプログラミング機構が、Direct3Dに代表されるグラフィックスAPIとしてしか提供されていなかったため、GPU上で実行させる処理はシェーダーとして記述、出力する必要があったからだ。シェーダー言語では、3D処理以外のプログラムを記述することはなかなか難しい。 近年のNVIDIAはこの点で応用性を高めることに注力しており、その本格的な第一歩として、2007年に「PhysX」物理エンジンの開発会社であるAGEIAを買収した。「PhysX」は近年勢いのある物理エンジンミドルウェアで、PC、プレイステーション 3、Xbox 360のほか、Wiiなどの最新世代ゲーム機にマルチプラットフォーム対応している。Epic GamesのUnreal Engine 3.0で採用されていることは有名だが、開発中のタイトルを含めると200本以上が利用しているという。 当のNVIDIAは「PhysX」物理エンジンをGeforceシリーズのGPU上で動作させるドライバの開発を進めてきており、GeForce 8シリーズ以降のGPUを使用しているPCユーザーならば、NVIDIAのホームページ上でダウンロードして実際に試すことができる。現在のところ標準グラフィックスドライバには含まれておらず、ベータドライバが必要となるため、技術的なショウケースの段階だ。
今回のセッションで披露されたデモンストレーションでは、物理演算にGPUを利用することで、CPU処理に比べて何倍ものパフォーマンスが得られる様子が実演された。現在ゲームで使われる物理処理は、比較的計算負荷の低い「剛体物理」と呼ばれるものが一般的だが、NVIDIAがGPU上の「PhysX」で推奨するのは、より計算負荷の高い「軟体物理」と「流体物理」である。水やゲル状の物質が複雑に流動する様子がリアルタイムにレンダリングされる様子は一見の価値がある。 流体シミュレーションのデモ「NVIDIA PhysX Particle Fluid Demo」ではパーティクル単位の処理を基本としている。通常の剛体物理では、各パーティクル(=粒子)は互いにぶつかれば反作用によって反対方向にはじけて分散していくが、流体を再現する際には、パーティクルが互いにある程度の力で引きつけ合うようにし、全体がひとかたまりの物質に見えるようレンダリングする。非常にリアリスティックな流水の様子が再現されていた。 この処理には数千、数万のパーティクル同士相互作用を常時計算する必要があるため、膨大な計算量が必要となる。もし、GPU処理を切ってCPU処理に切り替えれば、実行速度は10分の1以下に低下して紙芝居状態だ。つまり、それだけGPUによる計算力が優れているということになる。 もうひとつのデモンストレーション「The Great Kulu」では、軟体として表現されたクリーチャーが登場する。吹き付けられた風の影響により表皮がたわんだり、歩く毎にボディ全体がぐにゃぐにゃ脈動する。胴体より狭い通路を、体全体をゆがませながら無理矢理押し通ってくる様は、生理的に気持ち悪いことこの上ない。この表現は、モデルの内部に大量の制御点を埋め込み、流体に近いシミュレーションを行なってレンダリング形状に反映させることで実現しているようだ。 NVIDIAではこのような軟体オブジェクトを作成するためのSDKおよびツールキット「APEX」を準備している。このツールキットを使用すれば、デザイナーが作成した3Dモデルに軟体シミュレーションのための内部制御点を生成し、PhysX上でぐにゃぐにゃと動かせるようになる。「APEX」のリリース時期は今年末になるとのことだが、無料配布になるのか、それとも有料のパッケージとなるのかについては現在検討中だという。
■ ゲームPCの演算力は余っている! C言語ライクな処理系「CUDA」によるGPGPU応用の可能性
よく、グラフィックスカードの売り文句に「シェーダーユニットを○○個搭載!」というものがあるが、Geforce 8以降の「統合シェーダー」と呼ばれる世代のGPUにおいては、それは汎用目的に使えるプロセッサがそれだけの数あるということなのである。例えばGeforce 8800GTXでは「32基相当のシェーダーユニット」が搭載されていと言われるが、これの実体は、浮動小数点演算を実行可能な128基のストリーミングプロセッサなのである。 この膨大な数のストリーミングプロセッサは、与えられた仕事を同時並列的に処理できる構造となっており、その能力は一般的に画面上に出力されるグラフィックスを描き出すために使われているわけだ。近年のゲームグラフィックスは非常に複雑であり、それをCPUで描けばGPUに比べて何十倍もの時間が掛かってしまう。GPUにはそれだけの暴力的な演算能力があり、実際のところ映像を作る以外の仕事も可能なほどに汎用性が高まっているのだ。だからGPGPUには期待が寄せられているのであり、この世に存在するゲームPCは、ゲームをしていない時に「膨大な演算能力を余らせている」のである。 「PhysX」による物理演算はそういったGPGPUの可能性の一端を見せてくれる分野だったが、NVIDIAが現在普及を進めている「CUDA」がもうひとつの大トピックだ。GPU版「PhysX」のベースともなっている「CUDA」は、従来シェーダーとして書く必要のあったGPGPUプログラムを、C言語に近い文法で記述可能にするというNVIDIA独自の処理系である。一般プログラミング言語の雄であるC言語に近いスタイルを取ることで、様々なデータやアルゴリズムを可読性の高い形式で扱えるのが特徴だ。
「CUDA」では、C言語を独自に拡張した文法により、いわゆる「繰り返し」の処理を同時並列的にGPUが扱える形式に置き換える。例えば、Geforce 8800GTXでは16のプロセッサーに各8個、計128個のストリームプロセッサが搭載されているので、128回の繰り返し処理を1ステップで実行できてしまうのだ。また各スレッドは「ブロック」と呼ばれるグループ単位で共有メモリを持てるのだが、このメモリはメインメモリとは比べものにならないほどの速度でアクセスできるため、様々なアルゴリズムがCPU処理に比べて格段に高速化される。 こういった仕組みにより、複数キャラクタのAI処理を同時に解決してしまったり、画像解析では複数画素を一度に処理してしまうことが可能となる。従来はジオメトリシェーダーで記述していたような処理についても「CUDA」はメリットがあり、ジオメトリ構造をプロシージャルに生成するような処理をさらに高速で処理できる能力があるという。セッションで例示された「マーチングキューブ法」というアルゴリズムでは、ジオメトリシェーダーの5倍速で動作するという。 このように、プログラマは「CUDA」を通じ、これまではグラフィックスを恐るべきスピードで描き出していた演算力を、一般的な用途に広く応用することができるようになる。セッションでは流体シミュレーションやAIの経路探索アルゴリズム、画像処理分野などの応用可能性が紹介されていたが、おそらく、「大量の情報を一定のアルゴリズムで処理する」という条件に適えば、あらゆる方面でその能力を活用できることだろう。 こういったパワーを十全に生かしたアプリケーションが多く登場してくるようになれば、一般ユーザーのPCの使い方にも大きなメリットが生まれてくるはずだ。例えば動画の再生、エンコードといった処理は大幅に時間短縮される可能性があるし、一般的なデータの分析、編集、作成といった色々な処理において、従来のCPU処理とは別次元の快適さを提供してくれるはずだ。 現在「CUDA」は開発者向けの無料パッケージが提供されており、最新バージョンは2.0となっている。今後継続的にバージョンアップしていくとのことで、今秋にはバージョン2.1が提供される予定であるとのことだ。GPGPUの応用性を高める技術としては他にマイクロソフトのDirect3D 11が挙げられるが、そのリリース予定時期は2010年前半であり、まだまだ遠い話である。つまり「CUDA」はそれに先駆けてGPGPUのパワーを広くエンドユーザーに届けてくれるというわけで、今後ますます注目が集まっていきそうだ。
(2008年9月10日) [Reported by 佐藤カフジ]
また、弊誌に掲載された写真、文章の転載、使用に関しましては一切お断わりいたします ウォッチ編集部内GAME Watch担当game-watch@impress.co.jp Copyright (c)2008 Impress Watch Corporation, an Impress Group company. All rights reserved. |
|