ニュース
» 2006年11月14日 19時00分 公開

“共有するシェーダ”でGPUの新しい時代を──G80の革新性に迫る (1/3)

開発コード名「G80」と呼ばれてきたNVIDIAの最新GPUが発表された。Direct X 10に対応した「ユニファイドシェーダアーキテクチャ」を採用する最新GPUの特徴を解説していく。

[笠原一輝,ITmedia]

新しい「共有するシェーダ」の仕組みを採用

 GeForce 8800シリーズの最大の特徴は「ユニファイドシェーダ」と呼ばれる新しいアーキテクチャを採用していることだ。統合型シェーダという言葉で定着しているこの方式のキーワード「Unified」(ユニファイド)は、日本語で「共有されている」という意味も持つ。そのため、共有シェーダと呼ばれることもある。

 なぜ、「共有」なのかを説明するためには、これまでGPU構造の変遷を理解する必要がある。画面1は一般的に3D描画が行われるまでにどのような処理が行われているのかを簡易的に示したものだ。まず、「頂点処理」(Vertex)と呼ばれる物体の頂点の位置が演算され、次いで「三角形処理」(Triangle)と呼ばれる三角形の位置計算が行われる。3Dはポリゴンと呼ばれる三角形の集合体として描かれているからだ。それから、「画素処理」(Pixel)と呼ばれる三角形に模様をつけたりする処理が行われ、「ラスタ処理」(ROP)と呼ばれる物体が重なっている部分の処理や境界部分をスムーズに表示させる処理などが行われ、その後、データがメモリに送られて実際に画面を描画する。

 現在のGPUでは、これらの処理をそれぞれ専用の演算ユニットを割り当てて行われている。例えば、頂点処理は「バーテックスシェーダエンジン」と呼ばれる演算ユニットを利用しているし、画素処理は「ピクセルシェーダエンジン」と呼ばれる演算ユニットを利用して行われている。

 しかし、頂点処理、画素処理の割合は、アプリケーションにより異なっており、例えば、頂点処理の割合が非常に大きなアプリケーションの場合、バーテックスシェーダエンジンはフルに使われているのに、ピクセルシェーダエンジンはあまり使われていないという事態が発生することがある(またはその逆も起こりうる)。こうなると、せっかく多数実装されている演算ユニットを遊ばせていることになる。これでは高価なGPUの性能がフルに発揮されていないことになる。

 GeForce 8800シリーズでは、頂点処理と画素処理に専用の演算ユニットを用意するのではなく、どちらにも利用できるハードウェアを採用することにした。あるアプリケーションで頂点処理と画素処理の割合が2対8である場合、どちらにも対応できる「共有」演算ユニットをその割合でそれぞれの処理に割り当てて利用することになる。これにより、搭載している演算ユニットを常に利用されている状態を作り出すことで、GPUの有効活用が可能になる。このようにハードウェア(ここでは、とくにシェーダユニットが関係する)を共有する(Unified)する仕組みになっているので、「ユニファイドシェーダ」と呼ばれているのだ。

従来の一般的な3D処理の仕組みでは、このように段階を経て処理が行われる
従来型GPUでは専用のシェーダユニットでそれぞれ処理を行っていたが(左)、ユニファイドシェーダでは処理するシェーダの割合によって動的に構成を割り当てられる

従来のGPUではシェーダエンジンの演算ユニットがフルに利用されていないことがある
ユニファイドシェーダではシェーダのハードウェアを有効に活用できる

Direct X 10の新しい仕組みを引き出すユニファイドシェーダ

 NVIDIAがこうした仕様を採用した1つの背景には、まもなくマイクロソフトがリリースを予定しているWindows Vistaで組み込まれる予定のDirect X 10にも関係がある。マイクロソフトは新しいDirect X 10で、新しいプログラミングモデルである「シェーダモデル4.0」(SM 4.0)と「ジオメトリシェーダ」と呼ばれる仕組みを導入する。SM 4.0では、統合(もしくは共有といってもいい)シェーダに対応した命令セットの追加が最大の特徴であるほか、シェーダを利用して整数演算ができるようになるなど、いくつかの新しい機能を備えている。これら新しい機能を実装したDirect X 10を十分に活用するためには、新世代のユニファイドシェーダアーキテクチャを採用することが最適解となる。ちなみに、こうした動きはNVIDIAだけでなく、ライバルのATI Technologies(今やAMDの一事業部であるが)も次世代GPUでは同じようにユニファイドシェーダを採用すると見られている。

 Direct X 10で採用されるジオメトリシェーダと呼ばれる新しい仕組みの特徴は、バーテックスシェーダによる頂点処理のあとに3D描画の最小単位となる三角形のポリゴン単位でまとめて多様な処理を行えることだ。これによって、一度演算が終わっているポリゴンをまとめて回転させたりできるようになる。これは、とくに影や肌、髪の毛の表現などに効果を発揮すると言われている。

 これらの処理は従来CPUで行われていたが、ジオメトリシェーダを使うことでGPUが行うことになる。、CPUに余裕ができるので、「CPUがボトルネックでゲームベンチの結果が上がらない!」という問題を解消できる。GeForce 8800シリーズはユニファイドシェーダという仕組みを採用しているので、ここでも、とくに専用のジオメトリシェーダエンジンをもうけることなく、ユニファイドシェーダの仕組みの中で手軽にジオメトリシェーダの処理が可能になっている。

 なお、ユニファイドシェーダの形になっていても、既存のシェーダモデル 1.x(DirectX 8.xで実装)、シェーダモデル 2.x(Direct X 9.0で実装)、シェーダモデル 3.x(Direct X 9.0cで実装)に対応したソフトウェアもそのまま実行できる。これは、GPU内部でユニファイドシェーダのハードウェアを仮想的に割り当てることができるためだ。ちなみに、Direct X 8以前のDirect X 7やDirect X 6に対応したアプリケーションも動作できる。

Direct X 10の仕組み。Direct X 9までに比べて新しくジオメトリシェーダのエンジンが追加された
シェーダモデル4.0では命令セットが増えたり、共有シェーダの命令を実行することが可能になっている

ジオメトリシェーダの解説。一度頂点処理が行われたあとでも、ポリゴンを移動できるので、影や肌の表現がより容易になる
例えば影の処理などはこれまで3つのプロセスがCPUで行っていたのに対して、Direct X 10ではGPU側に処理が移動している

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

この記事が気に入ったら
ITmedia PC USER に「いいね!」しよう