●Unified-Shaderか従来型Shaderかがポイント Windows Vistaに実装される、Microsoftの次世代マルチメディアサブシステム「DirectX 10」。DirectX 10のGPUハードでのサポートは2方向へと分化しつつある。GPUの演算ユニットであるProgrammable Shaderの実装で、用途毎に個別の種類のShaderを用意する「独立(Independent)Shader」を取るか、それとも、単一の種類のShaderに統合する「Unified-Shader」を取るかの2方向だ。DirectX 10世代GPUでは、Shaderの構成を一新したUnified-Shader型のアプローチが標準になると思われていたが、従来型のIndependent-Shaderも併存する。 GPUベンダーは2006年末から2007年前半にかけて、DirectX 10対応GPUを市場に出荷するつもりだ。あるGPU関係者によると、DirectX 10については、GPUベンダーは、Microsoftとの合意によって、2006年8~9月頃までにDirectX 10対応GPUのサンプルを完成させる予定になっているという。これは、Windows Vistaの最終コードの完成に間に合わせ、Windows VistaのDirect3D 10(D3D 10)ランタイムとの互換性チェックを行なうためだという。DirectX 10 GPUがイネーブル(有効)になるのは、そのすり合わせの後の「Vista Refresh」のフェイズとなる。また、DirectX 10はVista以外では提供されない。 そのため、DirectX 10 GPUはVistaのスケジュールの遅れにある程度影響される。ただし、GPUハードの基本的なスケジュールは変わらないと見られる。 「Vistaの遅れは、GPUの開発計画に全く影響しない。なぜならDirectX 10対応GPUは、2年も前から開発をしているからだ。ここへ来ての3カ月の遅れは、大きな違いではない」とNVIDIAのDavid B. Kirk(デビッド・B・カーク)氏(Chief Scientist)は説明する。 3社のうちATIとS3は、2007年前半に市場に出るDirectX 10 GPUで、Unified-Shaderアーキテクチャ型の実装を取る。対するNVIDIAは明言はしないものの、従来通りの独立(Independent)型ShaderアーキテクチャでDirectX 10をサポートする見込みだ。NVIDIAは、時期も他の2社よりやや早く、年内を目指しているようだ。NVIDIAが他社よりもリリースを速くできるとしたら、それは、実装上の未知数要素の少ないIndependent-Shader構成を取るからだと思われる。Intelも、DirectX 10サポートを既存パイプラインまたはその拡張で実現しようとしているようだ。 ●ラディカルなDirectX 10が要求するGPUの変革 ハードウェア面では2派に分かれつつある、GPUでのDirectX 10サポート。どうして、これだけの大きな違いが生まれるのか。それは、DirectX 10がラディカルな改革だからだ。DirectX 10の3DグラフィックスAPIである「Direct3D 10(D3D 10)」は、従来のDirectX 9のD3D 9から大きな革新となる。そのため、ハードウェア実装では、どういう選択を取るかで姿勢が分かれる。 大まかな構図で言うと、次のようになる。Unified-Shader派は、DirectX 10での変化に合わせてハードも急改革、API側の新フィーチャを最大限に活かすべきという立場を取る。そのために実装が重くなっても、Unified-Shaderによるフレキシビリティなどの利点の方が意味が大きいと考える。一方、Independent-Shader派は、DirectX 10に対応はするものの、ハードの改革は漸進的でなければGPUの生パフォーマンス向上を維持できないと見る。オーバーヘッドを考えて、実装面ではラディカルな改革は抑え、パフォーマンス効率を追求する。 GPUベンダーを調停してAPIを策定し、OSに実装するMicrosoftも、「DirectX 10イコールUnified-Shader」とは位置づけない。ただし、Microsoftはよりプログラミングモデルを統合化しやすいUnified-Shaderを望んでいると推測される。3月に開催された「GDC(Game Developers Conference)」での、Microsoftのプレゼンテーションからも、そうした思惑が見え隠れした。また、Independent-Shaderを取ると見られるNVIDIAも、Unified-Shaderを否定しているわけではなく、移行が漸進的に進むだろうと言う。 つまり、大枠で言えば、Unified-Shaderがゴールになるという点では、グラフィックス業界は一致している。ただし、そこへ至るスピードでは温度差がある。その理由はGPUパフォーマンスの維持にあるだけに、Microsoftも、無理強いができない状況にあると考えられる。 ●汎用性を高めるDirectX 10のプログラミングモデル これまでも何度かレポートして来たが、D3D 10の正体は、GPUに、より汎用コンピューティングに向いたAPIをもたらすことにある。そして、API側の改革は、GPUハードウェア側に、大きな変革を要求する。 MicrosoftのD3D 10のグラフィックスパイプラインの特徴は、大きく整理すると次の4点となる。 (1)コモンシェーダモデル(Common Shader Model) この4フィーチャは、全てがGPUのプログラマビリティの向上につながっている。また、その中でも(1)(3)(4)は、プログラミングモデルの汎用性の向上につながる。 下が、D3D 10の論理パイプラインだ。プリミティブを扱うGeometry Shaderが加わり、Vertex/Geometry Shaderからフレームバッファへの出力であるストリームアウトが加わる。従来はPixel Shader以外はメモリへの直接の出力ができなかった。しかし、ストリームアウトによりVertex/Geometry Shaderからメモリに直接書き込みができるようになる。
ビデオメモリは、この図ではさまざまなバッファに分かれているように見えるが、実際の管理は一体化される。全体がメモリアレイとして、各Shaderから自由にアクセスが可能となる。今まで、GPUは、これはテクスチャ、これは○○バッファといった形でメモリを管理していた。しかし、D3D 10では、いずれもメモリアレイ上のデータとして扱われ、リソースは「View」として定義されることで区別されるようになる。簡単に言えば、CPUのような柔軟なメモリ管理に変わるわけだ。 地味ながら、メモリ管理はGPUの汎用化のカギの1つと言われている。例えば、IntelのJustin R. Rattner(ジャスティン・R・ラトナー)氏(Intel Senior Fellow, Cheif Technology Officer, Corporate Technology Group)は、GPUの汎用コンピューティング利用(General-Purpose GPU:GPGPU)の可能性について、次のように語っていた。 「GPUはメモリモデルが非常に複雑だ。これがGPUで汎用コンピューティングを行なう場合に問題になるだろう。この制約を緩めるなら、可能性が出てくる。そうした変化を含めて、CPUベンダーはいずれもGPUの動きをまだ静観している」 DirectX 10では、まさにこの部分が改良されるわけだ。 ●Common Shader ModelでShaderフィーチャの統一を GPUはこれまで、ほぼ論理パイプラインをそのままハードウェアで実装してきた。DirectX 10世代でも、Independent-Shader実装にする場合はそうなる。上の垂直型の論理パイプラインをそのままハードウェア化するイメージだ。その場合は、Geometry Shaderとストリームアウトをパイプラインに加え、全Shaderにメモリパスとテクスチャユニットを設け、Shaderの演算ユニットを拡張、メモリ管理を改良することで対応すると見られる。 それに対して、Unified-Shaderの場合、パイプラインを水平に倒して、下のようなShaderアレイに物理的に再構築する。この場合は、Shaderの物理的な実装は均一となり、Vertex ShaderやPixel Shaderといった役割は動的に割り振られることになる。論理パイプラインは、Unified-Shader上の仮想的なパイプラインとなる。
いずれの実装の場合も、Shaderは「Common Shader Model」をサポートすることが求められる。D3D 10のShader Model 4.0(SM 4.0)では、Common Shader Modelとして、Programmable Shaderのフィーチャセットの統一化が図られるからだ。GDCでD3D 10についての紹介を行なったMicrosoftのSam Z. Glassenberg氏(Program Manager, Microsoft)は、次のように説明する。 「Vertex Shader、Geometry Shader、Pixel Shader全てが、基本的には同じ機能を持つ。(それぞれのShaderの)非常にユニークな特殊機能は、(全てのShader間で)プラスマイナスされ、共通化される。こうしたハードウェアでは、ニーズに応じてリソースのアレンジとパイプラインのコンフィギュレーションが可能になる」 これまでは、各Shader毎にフィーチャの違いがあった。しかし、D3D 10では、APIセット上では各Shaderが共通になるようにする。このプログラミングモデル上の統合を、Common Shader Modelと呼んでいる。ここでミソなのは、Common Shader ModelはAPI上の統合であって、実装を定義しているわけではないことだ。 だから、Common Shader Modelの要件を満たしていれば、Independent-Shader実装であってもD3D 10のサポートは可能だ。ただし、MicrosoftのGlassenberg氏が言うような、ニーズに応じたリソースのアレンジをフレキシブルにやろうとすると、Unified-Shaderの方が適する。Microsoftの本音は、Unified-Shader実装にあると見られる。例えば、MicrosoftのDavid Blythe氏(Architect, Windows Graphics, Microsoft)は、GDCのプレゼンテーションで、将来のGPUの物理パイプラインの仮説として下のプレゼンテーションを示した。
ちなみに、Microsoftは以前、API上のShaderの統合化もUnified-Shaderと呼んでいた。しかし、現在はCommon Shader Modelと呼び変えている。これは、物理的なShader統合化の名称としてUnified-Shaderが定着したため、混同を避けたのかもしれない。 ●Unified-Shaderの準備を進めるATIとS3 Unified-ShaderかIndependent-Shaderかの選択は、Microsoftの強制力が完全には及ばない範囲にあり、GPUベンダーによって異なる。NVIDIAの「G80」でのDirectX 10対応は、おそらく論理パイプラインをそのままハードウェアで実装する形に近いものになると推定される。明確に、Unified-Shaderを取るのは、今わかっている限りではATI TechnologiesとS3 Graphicsの2社だ。 ATIは、4年も前からUnified-Shaderの利点を説き続けてきた。すでに、ゲームコンソール向けの「Xbox 360 GPU(Xenos)」では、Unified-Shaderを実装済みだ。また、PC向けGPUでも、Unified-Shader実装への下準備を着々と進めてきた。 例えば、いきなり実装すると危険そうな技術については、Radeon X1800(R520)などですでに実装をしている。具体的には、Unified-Shader化で増えるメモリクライアントを接続するためのリングバスや、各Shaderのマルチスレッディングを制御する「Ultra-Threading Dispatch Processor」などをR5xxシリーズで備えた。2007年の「R6xx」ファミリでのUnified-Shader化への準備は、ほぼ揃った状態だ。 S3 Graphicsも、次世代GPU「Destination 1」では、Unified-Shader型の実装の「Scalable Execution Units」を備えると説明する。Destination 1のサンプル出荷は2006年夏頃で、製品が実際に市場に出るのは2007年になる見込みだ。Destination 1は90nmプロセスで、比較的大型のチップになる。それでも、S3がメインターゲットに据えるモバイルでは、T&L(Thin & Light)市場もターゲットにできるという。さらに、続けて、低コスト版となる「Destination 2」も予定している。S3は、DirectX 9 SM 3.0はスキップして、一気にSM 4.0のUnified-Shaderへと移行する見込みだ。
●難しいハードウェアのビヘイビアの一貫性の確保 DirectX 10サポートへと向かうGPU。しかし、こうした実装上の差異は、DirectX 10の基本コンセプトに微妙な影を落としている。D3D 10 APIの構想の根底にあるコンセプトは、次の4項目だ。 ・一貫性(Consistency)
実装上の違いは、このうちの一貫性に影響する可能性がある。GDCで、MicrosoftのGlassenberg氏は、一貫性について「D3D 10では、ハードウェアを通じての一貫性が提供される。コンソール(ゲーム機)のような一貫性だ。すべてのベンダーのハードで、同じフィーチャが同じビヘイビア(behavior)をするように、厳密に要求している」と語っていた。 つまり、DirectX 10では、GPUが同じ機能を持ち同じように動作することが求められている。DirectX 10では、それを前提に、「Capsチェック」を廃止する。従来のように、CapsによってGPUに実装されている機能を調べて、ロードするプログラムモジュールを変えるような面倒を省くわけだ。互換性での差異により複雑になってしまったDirectX 9からの反省がここに見える。 しかし、DirectXと対応GPUの開発は、MicrosoftとGPUベンダー間の綱引きで決められる。そのため、実際にGPUサンプルが上がって見ると、実装上使い物にならない機能が出てきたりといった問題が発生する可能性がある。特に、GPUの物理的な実装で大きな違いがあると、コンソール並の一貫性を保つことは難しいかもしれない。 □関連記事 (2006年4月18日) [Reported by 後藤 弘茂(Hiroshige Goto)]
【PC Watchホームページ】
|
|