|
【Game Developers Conference 2004】レポート
「DirectX Day」最終セッション「DirectX Graphics Futures」 |
DirectXの現在と未来についての講演を行なったマイクロソフトWindows Gaming & Gaming Technologies Grahics Architect David Blythe氏 |
なお、このドライバのアップデートにより、従来のRADEONやGeForce FXシリーズにおいてもDirectX 9.0cの新フィーチャー(の一部)が利用可能となる。NVIDIA関係者によれば、GeForce FXシリーズ用の最新ドライバとしてリリースされる「Detonator 60」では、初代GeForce FX 5800発表以降、長らくサポートされてこなかった浮動小数点実数バッファの使用が可能になる予定だという。このあたりは開発者にとっては朗報となることだろう。
DirectX 9.0cの新フィーチャーは以下の通り。
(1)プログラマブルシェーダー3.0のサポートと、これに対応したシェーダー言語(HLSL)の提供
(2)ジオメトリ・インスタンシング
(3)重心修飾子(Centroid Modifier)
(1)は読んで字のごとく。(2)は頂点処理を効率よく行なうための処理系、(3)はテクセルなどのマルチサンプル(読み出し)時の新しい方策の提供に相当する。新GPUを使ったプログラマブルシェーダ3.0の活用デモは、NVIDIAが執り行なったセッションで初公開されており、これについては別レポートで詳細をお届けする。
ところで、次期Windows「Longhorn」では、DirectX 10が統合されると見られており、初代DirectX 9.0発表以降、ずっとバージョン番号が9.0に据え置かれてきたことを考えると、Windows XP世代ではDirectX 9.0を貫き通す可能性が出てきた。
今年以降のDirectXのロードマップ |
年号から判断するに「Next(2006)」がDirectX 10を指すものと思われる。「2007+」に記載されている要素には顔文字が記載されており、その内容はあまり当てにならないが、「Next(2006)」はLonghornを見据えた仕様であり注目に値する。
「Remove FixFun」は「固定パイプラインAPIの削除」を意味し、GPUが過去アーキテクチャからの完全な決別をはかることを意味する。
そして「Virtualization」は「GPUの仮想化」を意味し、この中でもっとも注目すべき点だといえる。一口で言うならば、「GPUでマルチスレッドをやる」ということだ。
これは、1つのGPUで、複数のアプリケーションを時分割で動かす、ということだ。実際には1つしかないGPUが複数あるかのように見える――だから仮想化――というわけだ。
Longhornでは、デスクトップ表示を含めた全てのグラフィックス表示がGPUの3D機能を活用することになる。ビデオ再生とゲームグラフィックスの表示を同時に行なった場合、ともにGPUのリソースを活用することになるわけだが、それぞれのアプリケーションで「GPUが使えるかどうか(GPUのリソースが空いているかどうか)」を判定するのはまどろっこしくてスマートではない。仮想化されたGPUが割り当てられ、各アプリは自分だけがそのGPUを使っているように見えていたほうがわかりやすい。こうした仕組みを実装しようというのだ。
次期DirectXのドライバモデルの模式図 |
GPUドライバがユーザーモード(アプリケーションが自由にできる領域)とカーネルモード(Windows-OSの管理下にあり、ユーザーやアプリケーションが手出しできない領域)に存在することに気づくだろう。
DirectXカーネルは、GPUのカーネルドライバから、仮想化されたGPU(グラフィックス)機能をDirect3Dランタイムに振り分ける役割を果たす。そしてアプリケーション(3Dゲーム、ムービー再生など)は、割り当てられたという自覚無しに、グラフィックス機能を活用して処理を行なうことになる。
取材協力して頂いたマイクロソフトWindows Gaming & Gaming Technologies Lead Evngelist Chris Donahue氏 |
GPUにしろCPUにしろ、時分割マルチスレッドというのはOS側で管理運営されなければ成り立たないので、DirectXがWindows(Longhorn)に統合される……というのは逆に「そうせざるを得ない」という見方もできる。
「GPUが仮想化される。だからGPUがマルチスレッドに対応する」……だからといって、その実現は字で書くほど容易ではない。
GPUがマルチスレッドに対応するということは、そのGPUがそれまで行なっていた描画作業を中断して、別の描画作業を行なわなければならない状況になるということである。たとえば、あるアプリケーションのピクセルシェーダーを実行中に、別のアプリケーションのピクセルシェーダを実行しなければならない状況が発生するわけだ。
となれば、CPUと同様にGPUがそれまでの作業状況を保存しておく領域(たとえばスタック構造)をサポートしなければならない。これはメモリアクセスになるので、当然タスクスイッチング時には多大なオーバーヘッドが発生する。
ここで1つ心配なのは、リアルタイム性を要求されるGPUパフォーマンスにおいて、こうしたオーバーヘッドがどう描画に影響するかだ。複数の3Dゲームを同時に動かす機会は少ないので、ゲームプレイ時はあまり問題にならないだろうが、複数のムービーを再生することはあるかもしれない。ムービーがカクカク再生されるのはあまり気持ちのいいものではない。
なお、GPUが仮想化されるということは、当然ビデオメモリも仮想化されなければおかしな話になる。アプリケーションごとに独自にテクスチャを読み込んだり、あるいはフレームバッファを確保してくるからだ。
つまり、次期DirectX世代では、ビデオメモリがメインメモリに待避されたり、あるいは最悪のケースではハードディスクに割り当てられる可能性も出てくるのだ。なお、こうしたビデオメモリの仮想化はすでに3DlabsのVPU「P10」が限定的ながら採用しているアイディアではある。
もしかするとDirectX 10世代のGPUには、グラフィックス描画の性能以外に、そうしたマルチスレッド処理能力の高さまでもが要求されるようになるのかもしれない。
さて、鋭い読者の中には「GPUがマルチチップやマルチコアになったらどうか」と考えた方も多いことだろう。これは理論上はありうる話だ。
ただし、3dfxのVoodooやXGIのVolariのような、走査線やフレーム単位の分業で「最大パフォーマンスを引き伸ばす」ものとは異なる。DirectX 10世代GPUのマルチ構成は、マルチCPUと同じように、負荷軽減目的の「重くなりにくい」という形で性能に効いてくることになるだろう。
逆に、「GPUをマルチにしなければならないほど、GPUに並列実行性能が要求される状況が出てくるのか」について考えると、まだなんともいえない。これについてBlythe氏は「GPUがグラフィックス描画以外に活用されれば、そうした機会も増えてくるのではないか」と分析する。
3Dゲームにおいてならば、キャラクタの運動学(キネマティックス)処理、物理演算などをGPUで行なったり、ピクセル単位に物理現象をシミュレートするアイディアなどの実現化、あるいは映像や音声などのエンコード/デコードをマルチスレッド化してGPUにやらせるようなソフトウェアが増えれば、GPUのマルチ化へのニーズが高まるかもしれない。
GPUはプログラマブルシェーダーアーキテクチャの採用でその姿を大幅に変身させたが、次の大変身は次期DirectX 10の登場時に起こりそうだ。
□「Game Developers Conference 2004」のホームページ
http://www.gdconf.com/
□マイクロソフトのホームページ
http://www.microsoft.com/japan/
(2004年3月26日)
[Reported by トライゼット西川善司]
GAME Watchホームページ |
|