後藤弘茂のWeekly海外ニュース

GPUコンピューティングとグラフィックスに分化するNVIDIA GPU



●GT200をDirectX 11拡張した新"Fermi"でグラフィックス市場をカバーか

 NVIDIAのGPUが分化を始めた。GPUコンピューティングとグラフィックス効率という、2つの方向への分化だ。これまで、NVIDIAのハイエンドGPUは、汎用コンピューティングとグラフィックスの両方の市場でのハイエンドだった。しかし今、NVIDIAは両世界でハイエンドのGPUに加えて、グラフィックスのパフォーマンス効率でハイエンドのGPUをラインナップに加えようとしている。それがGeForce GTX 460だ。

 GeForce GTX 460のダイ(半導体本体)は、384個の「CUDAコア(NVIDIA GPUのプロセッサ)」を物理的に備える(うち336個が有効)と推測される。物理的に512個のCUDAコアを載せたGeForce GTX 480(GF100)ダイと比べて、75%のプロセッサ数だ。つまり、GF104のダイは、同クロックであれば生のピークパフォーマンスでハイエンドに75%まで肉迫する。

 プロセッサ数が近いだけでなく、GeForce GTX 460は480と比べて、ダイ当たり及びトランジスタ当たりのグラフィックスパフォーマンスが高いと推定される。つまり、消費電力はGeForce GTX 480より大きく下がり、ダイサイズ(半導体本体の面積)もかなり小さくなると推測される。なぜなら、GeForce GTX 460のベースとなっているアーキテクチャはGF100ではなく、GT200(GeForce GTX 280)だからだ。

 GeForce GTX 460がGT200を拡張したアーキテクチャだと推測される理由は、前回の記事で説明した通り。プロセッサ数から、ベースアーキテクチャは簡単に測ることができる。NVIDIAは、ハイエンドGPUは汎用コンピューティングに最適化する一方、コンシューマ向けにはグラフィックスに最適化したラインナップを用意することで、2正面戦争を勝ち抜こうとしている。

 ダイサイズ的にも、GeForce GTX 460はハイエンドに近い大きさだと推測される。40nmプロセスで製造されるGeForce GTX 460のダイは、300平方mmを大きく超えると見られるからだ。ダイの構成としては、GeForce GTX 280(GT200)をハイエンドに、その下をG90系で揃えていた時に近い。しかし、今回は、GT200とG92(GeForce 8800GT/9800GTX)の時以上に、2つのGPUのパフォーマンスが接近している。

NVIDIA GPU ダイと製品
PDF版はこちら

●次期モバイルGPUは192個のCUDAコアを備える

 GeForce GTX 460(GF104)の下の階層に位置するパフォーマンスGPUは、192個のCUDAコアを搭載していると推測される。ノートPC GPUでの次期エンスージアスト向けGPU「N11E-GS」の搭載CUDAコア数が192だからだ。N11E-GSは、1カ月前、COMPUTEXのNVIDIAブースに控え目に展示されていた。製品型番では460Mになると見られるN11E-GSは、DirectX 11(Direct3D 11)対応のモバイル向けのパフォーマンスGPUだ。GF106と同ダイと見られるN11E-GSの、NVIDIA展示マシンのプロパティを見ると、CUDAコアの数は192個となっていた。

 192という数字は判断が難しい。32でも24でも割り切れるからだ。GeForce GTX 480(GF100)アーキテクチャをベースにしたGPUは、32で割り切れる数のプロセッサを持つ。GeForce GTX 280(GT200)アーキテクチャをベースにしたGPUは、24で割り切れるプロセッサ数だ。そのため、どちらかでしか割り切れないプロセッサ数ならば、簡単にアーキテクチャを割り出すことができる。

Fermi、G80、NV40のProcessor Clusterのユニット数比較
PDF版はこちら

 ところが、192はどちらでも割り切れるため、GF100ベースとGT200ベースの両方の可能性がありうる。NVIDIAでノートPC向け製品を担当するRavi Kaushik氏(Product Marketing Manager, NVIDIA)は、COMPUTEX時に次のように説明していた。

 「今後、Fermiアーキテクチャで、2から3の異なる新しいダイが登場する。すでに発表しているGeForce GTX 480M(N11E-GTX)より、下の価格帯と消費電力帯に向けたものになる。

 しかし、下位のチップでも、SM(Streaming Multiprocessor)やGPC (Graphics Processing Cluster)といった構造は上位のチップと同じになる。トップのチップ(480M)はSMが11個だが、例えば、ミドルの製品はSMが6個、ボトムの製品はSMが4個といった構成になるだろう。SMの構造を同一に保つのはプログラミングモデルを同一に保つためだ。それが、最も重要な要求だからだ」。

 ここまで聞くと、GF100アーキテクチャのように思えるが、非合理な部分もある。上位のGeForce GTX 460(GF104)で、グラフィックス効率を重視するGT200系を選択したのに、それより下位のチップがGT200をベースにしないのは不自然だ。今の段階では、まだ明確なことはわからないが、コア数からの計算ではどちらでもありうる。

 N11E-GSダイがGT200ベースの拡張アーキテクチャだとすると、構成を推測することは非常に簡単だ。192個のCUDAコアは、推測上のGeForce GTX 460のダイの半分の構成だからだ。もし、GeForce GTX 460が192個のCUDAコアのブロックを2つ束ねた構成になっているとすれば、それを半分にすれば192個のN11E-GSダイができる。SMが24個、TPCが8個、テッセレータが4個、ラスタライザが1または2個となる。GF100アーキテクチャだとすると、CUDAコアの数は32×6で192個になる。SMが6個で、テッセレータも6個、ラスタライザは1または2個と推測される。

●ダイエリアでの大きな違いは演算リソース以外の部分

 GPUコンピューティングに最適化したGF100ダイが、グラフィックスでの効率が悪いとしたら、どの程度悪いのか。逆を言えばGT200アーキテクチャを拡張すれば、どれだけ効率がよくなるのか。

 まず、ハイエンドのGF100系ダイは、チップ内メモリを含めて全てECC保護で、1:2の倍精度演算など、さまざまなHPC(High Performance Computing)向けフィーチャを備えている。これらの機能はHPC向けのTESLA系製品ラインでフルにイネーブル(利用可能)にされており、GeForce系製品ラインでは有効にされていないものがほとんどだ。しかし、GF100ダイの場合は、機能自体はダイ上に実装されているためダイオーバーヘッドになっている。

 しかし、下位のGPUダイでは、HPCに最適化されたフィーチャは、物理的に最初から実装されない。「ECCのような機能は、TESLAでは必要だが、コンシューマでは不要だ。それらがコンシューマ向け製品に入るようになるとは思えない」とNVIDIAのRavi Kaushik氏(Product Marketing Manager, NVIDIA)は説明する。HPC向けのフィーチャが取り払われるため、下位のGPUは、グラフィックスでは、原理的にパフォーマンス/トランジスタの面で効率的になる。加えて、GF100型ではなく、GT200型のアーキテクチャを取ることで、SM自体の構造が変わる。これも効率に影響する。

 もっとも、両系統のGPUダイを比較する限り、そうした違いはダイサイズには、それほど大きくは反映されないようだ。

 下の図はほぼ同縮尺でNVIDIA GPUのダイを比較したものだ。これを見ると、40nmプロセスで比較した場合GF100系のSMは、GT200系のTexture/Processor Cluster (TPC)より一回り以上大きいことがわかる。GF100のSMにはテクスチャユニットとロード/ストアユニットが含まれているので、GT200のTPCにほぼ等しい。しかし、GF100のSMは32個のCUDAコアを持っているのに対して、GT200系のTPCは24個のCUDAコアしか備えていない。そのため、演算プロセッサとそれに付帯するユニットについて言えば、実はそれほど密度は変わらない。

GF100、GT200ダイの比較
PDF版はこちら

 では、何が違うのかと言うと、実は演算リソース以外の部分の面積が違う。GT200ではダイ上でTPC群が300平方mm以上の面積を占めていたのに、GF100ではSM群は250平方mm強の面積しか占めていない。GF100では、演算リソース部分の比率が落ちていると考えられる。それだけ、GF100では制御系やバス、メモリ階層などがダイ面積を食っていると推測される。

●バスとメモリのアーキテクチャが大きく異なるGT200とGF100

 Fermiとそれ以前のGT200アーキテクチャでは、バスとメモリ回りのアーキテクチャが大きく異なる。GeForce GTX 460のポイントの1つは、この部分をどう設計するかだ。

 Fermiでは各SMの内部に、コンフィギュラブル(Configurable)なローカルメモリ64KBが搭載された。このメモリは、シェアードメモリと書き込み可能なL1キャッシュに切り分けられている。さらに、GPU全体で共有するライタブルなL2キャッシュが備えられた。また、キャッシュに合わせてFermiではバスアーキテクチャも改革された。内部バスは統合型の双方向クロスバースイッチに組み直された。バスとメモリ階層の改革は密接に結びついており、セットになっている。

 それに対してGT200では、内部バスは、上り方向(メモリ→プロセッサ)のテクスチャ用クロスバースイッチと、下り方法(プロセッサ→メモリ)のROP(Rendering Output Pipeline)用クロスバースイッチの2つの分離されている。また、キャッシュメモリは、リードオンリーのバッファであるテクスチャキャッシュと、リード&ライトのROPキャッシュの2つに分離されていた。SMの中には汎用のL1キャッシュはなく、シェアードメモリだけが搭載されている。

 つまり、FermiとGT200では、バスと内部メモリの思想が全く異なっている。その部分の設計まで拡張しようとすると、やっかいで設計に時間がかかってしまう。なによりも、GT200世代の効率性を犠牲にしてしまう。そのため、GT200をベースにする場合は、バスと内部メモリ回りは、GeForce GTX 460でも、GF100型にならない可能性が高い。

GF100、GT200のメモリ階層
PDF版はこちら

 GT200でグラフィックスの性能が上がるポイントもいくつかある。1つは、マルチスレッディングによるメモリレイテンシの隠蔽。GT200では、SM当たりのレジスタ本数が16,384本で、インフライトで制御できる最大Warp数は32 Warp。そのため、1スレッド当たり16レジスタと、比較的少ないレジスタ数なら、多数のWarpを立ち上げることで効果的にメモリレイテンシを隠蔽できる。これは、使うレジスタ数が比較的少なく、内部メモリでのレイテンシ短縮が効きにくいケースがあるグラフィックスタスクには向いている。こうした特徴は、おそらくNVIDIAはそのまま残すだろう。

●プログラミングでの最適化の一貫性が薄れる?

 NVIDIAは、現行世代でも、ハイエンドGPUとそれ以下のGPUで、汎用コンピューティングの機能に差を付けていた。具体的には、倍精度演算のサポートなどは、GT200世代でも、下位のGPUではサポートしなかった。倍精度演算ユニットをSMに実装しないで済むからだ。今回も、NVIDIAはそうしたコンピューティング機能の差をつけてくると考えられる。しかし、Fermiアーキテクチャは飛躍が大きかったため、NVIDIAの差別化の方法によっては、ハイエンドとそれ以外のGPUで、機能の差が大きくついてしまう可能性もある。

 もちろん、プログラミングモデルはCUDAである程度抽象化される。しかし、アーキテクチャ上で見えない部分も含めれば、パフォーマンス最適化に大きな影響が出る可能性がある。GPUプログラミングでは、パフォーマンスチューニングが要で、何もしないとパフォーマンスが全然発揮できない場合が多々あるから重要だ。

 GPUがHPC(High Performance Computing)市場に進出できた理由の1つは、同じプログラミングモデルがHPC向けからコンシューマ向けまで保たれていることだった。学生が秋葉原で買ってきたビデオカードで走らせたプログラムを、GPUクラスタの上でスケールアップして走らせることができる。そうした上から下までのスケーラビリティが、今後は次第に薄れて行く危険の萌芽が見えてきている。