統合型シェーダアーキテクチャと未来のDirectX

DirectX 10世代/SM4.0対応GPUの登場一番乗りは、NVIDIAのGeForce 8000シリーズであった。やや遅れて、競合ATI(AMD)はRADEON HD2000シリーズを投入している。

NVIDIA「GeForce 8800 GTX」。最初のDirectX 10世代/SM4.0対応GPUはNVIDIAからりリースされた

ATIとNVIDIA、両社共にDirectX 10世代/SM4.0対応GPUは、そのハードウェアに「統合型シェーダ」アーキテクチャ(Unfied Shader Architecture)を採用している点が特徴となっている。

プログラマブルシェーダには頂点シェーダ、ピクセルシェーダ、そして新しいジオメトリシェーダの3つのシェーダがあるが、描画するシーンによって頂点シェーダ、ピクセルシェーダの負荷は変わってくるし、新しいジオメトリシェーダは、これまでのアプリケーションを利用している限りではあまり活用の場もない。にもかかわらず、頂点シェーダ何基、ジオメトリシェーダ何基、ピクセルシェーダ何基と固定的にシェーダユニットを割り振ってGPUを設計してしまうのは無駄が多くなる。各シェーダは、確かにそれぞれ特有の役割をこなしてはいるが、実際の演算内容はベクトルや行列の計算が主体であり、各シェーダ間でそれほど大きな違いはない。

であれば、"汎用"としてのプログラマブルシェーダユニットを多数用意し、必要に応じてそれらを、頂点シェーダとして起用したり、ジオメトリシェーダとして起用したり、ピクセルシェーダとして起用した方が合理的なのではないか。

これが統合型シェーダアーキテクチャの基本的な考え方だ。

これにより、頂点負荷が大きいときには頂点シェーダがより多く起用でき、ピクセル負荷が高いときにはピクセルシェーダが多く起用できるようになる。

従来のGPUでは頂点シェーダ、ピクセルシェーダのどちらかにボトルネックが発生してしまうと、性能が出しにくくなるばかりか、暇をもてあますシェーダまでが出てきてしまう

統合型シェーダアーキテクチャであれば、負荷のかかっているシェーダを増やすという対応でボトルネックを低減できる

もう少しわかり易く。左が従来の固定振り分け式アーキテクチャ、そして右が統合型シェーダアーキテクチャのイメージだ

ATIはPC向けDirectX 10世代/SM4.0対応GPUの投入ではNVIDIAに対して遅れをとったが、「統合型シェーダアーキテクチャ」の具現化は2005年に登場したXbox360-GPUに対して行っており、このアーキテクチャにはATI側に一日の長があるといえる。DirectX 10世代/SM4.0対応GPUの一番乗りは逃してしまったが、統合型シェーダアーキテクチャ実用化の一番乗りはATIだったのだ。

(トライゼット西川善司)