[an error occurred while processing the directive]

NVIDIA、Radeon HD 2000の仕様に異論
~「AMDの方法にならえば、G80のSPの数は256個になる」



 米NVIDIAは、報道向けに宛てた書簡の中で、AMDが14日に発表した「Radeon HD 2900」の仕様に対するNVIDIAとしての解釈を表明した。ここでは、その内容をほぼ原文のまま紹介したい。もちろん、NVIDIAはRadeon HD 2900の全てを知っているわけではなく誤解が含まれる可能性もあり、AMDとしてもこのNVIDIAの見解に対する異論はあるかとは思われるが、2つのDirectX 10対応GPUの思想/設計の違いに対する理解には役立つだろう。

【Q】Radeon HD 2900は320個のシェーダ(ストリーミングプロセッサ)を搭載するが、GeForce 8800 GTXは128個しかないが

【A】AMDでは、標準ALU(演算器)と特殊機能ALUの数を合算して320としている。GeForce 8800 GTXは128個の標準ALUと128個の特殊機能ALUを搭載しており、この方法で数えるなら、GeForce 8800 GTXのシェーダ数は256となる。それでも、Radeon HD 2900のシェーダ数は25%多いが、GeForce 8800 GTXのALUクロックは82%、GeForce 8800 GTSのALUクロックは62%高速だ。これらを総合すると、Radeon HD 2900に対し、GeForce 8800 GTXの方が高速で、GeForce 8800 GTSは同等となる。

【Q】GeForce 8800はスカラアーキテクチャで、Radeon HD 2900はVLIW命令に対応したスーパースカラアーキテクチャとなっているが、どちらが優れているのか

【A】まず、NVIDIAは何年も前にGeForce 6でスーパースカラアーキテクチャを採り入れた。また、その前の世代のGeForce FXでは、VLIW(Very Long Instruction Word)アーキテクチャを採用した。両者にはそれぞれ長所と短所があるが、その経験を活かして、GeForce 8はスカラアーキテクチャに設計した。

 スーパースカラアーキテクチャの長所は、個々のシェーダプロセッサに対して複数の独立した命令を発行できる点にある。Radeon HD 2900の場合で言えば、個々のシェーダプロセッサに対しクロック毎に、最大5個の独立した算術命令と、1つの分岐命令を発行できる。もし、Radeon HD 2900が常に1クロックあたり5個の算術命令を発行できるなら、その性能は非常に高くなるだろう。しかし、スーパースカラアーキテクチャの特性上、ALUの数が増えるほど、それら全てに対して仕事を割り当てるのが困難になる。

 つまり、Radeon HD 2900がピーク性能を維持するには、ドライバがシェーダコードストリームを読み込んだ後、常に5個の独立した命令を出力する必要がある。もしドライバが1クロックで2つの命令しか取り出せない場合、パフォーマンスは2/5に落ち込むことになる。

 GeForce 8800のスカラアーキテクチャではこの問題は発生しない。というのも、シェーダユニットをフル活用し続けるために、ドライバは1クロックごとに、2つの命令(1つが標準ALU用、もう1つが特殊機能ALU用)だけを取り出せばいいからだ。結果、実効性能ではGeForce 8800が勝ることになる。

【Q】実際のゲームではスカラコードとベクタコードのどちらがより多く使われるのか

【A】実際のシェーダは、異なるサイズのスカラコードとベクタコードを組み合わせて使用する。3Dアルゴリズムが複雑化するにつれ、より多くのオペレーションが非固定のベクタサイズにて実行されるようになる。例えば、テクスチャの座標は1次元だったり、2次元だったり、3次元だったりする。ほとんど全てのゲームで用いられるシャドーマップは1つしか要素を持たない。こういった形式は固定サイズのスーパースカラALUにはうまく適合せず、スカラ設計の方が柔軟性に富み、効率も高い。

【Q】なぜGeForce 8800のスカラシェーダはRadeon HD 2900のスーパースカラシェーダよりも効率が高いのか

【A】2つの数を加算して、その後乗算するシンプルなケースを考えてみたい。

Sum = A + B
Result = Sum * C

2つめの計算は、最初の計算の結果に依存している。もしRadeon HD 2900が典型的なVLIW設計に固執するなら、2番目の計算が最初の計算の結果に依存するため、2つの計算は同じVLIW命令ワードにグループ化できない。例えば、Radeon HD 2900のシェーダプロセッサでは、最初の計算は最初のVLIW命令ワードで同時発行されたオペレーションの中の1つによって計算され、次のVLIW命令ワードにおけるMUL(乗算)オペレーションが、最初のVLIW命令で求められた結果を利用することになる(1つのALUがMULを実行するには複数のクロックサイクルが必要なことも覚えておくべきだろう)。

 依存性はしばしば命令ストリームの中で発生するので、VLIWコンパイラが、全てのVLIW命令ワードの中の全てのスロットを満たすために、効率的に依存性のないオペレーションをグループ化することはできず、効率性が下がるのは周知の事実だ。言い換えるなら、5つのALUを搭載したスーパースカラVLIWアーキテクチャは、連続した依存的コードのストリームを使うプログラムを実行すると、その効率性が20%に落ち込む。

 GeForce 8800では、上記のような依存性のある状況で、1つのスカラストリーミングプロセッサ(SP)内のALUは、最初の命令の結果を待たねばならないが、全てのSPに対して効率的な作業を割り当てられるため、VLIWアーキテクチャと違い、命令/オペレーションスロットが無駄になることはあり得ない。

【Q】GeForce 8800のテクスチャ性能はRadeon HD 2900の2倍以上。シェーダ性能がもっとも重要視される今日、なぜそのようなテクスチャ性能が必要なのか

【A】シェーダが何もないところからその効果を発揮することはまずなく、通常は非常に多くのテクスチャ、シャドーマップ、バンプマップ、キューブマップなどを読み込んだ上で、複雑なシェーディング計算を行なう。必要なテクスチャが与えられないと、シェーダプロセッサはより効果的な仕事を行なうことができない。

【Q】AMDはRadeon HD 2900が80個のテクスチャサンプラを搭載していると主張しているが、これはGeForce 8800より優れているのでは

【A】80個のテクスチャサンプラというのが何を示しているのか定かではない。それよりも、テクスチャ性能を知る上で、さまざまなテクスチャ形式やフィルタリング方法を用いて、クロックあたりのフィルタリングされたピクセルの数を考える方が分かりやすいだろう。

 一般的な非HDRテクスチャ(チャネルあたり8bit)では、GeForce 8800は、バイリニア、トライリニア、もしくは2:1異方性フィルタリングを使って1クロックで32個のピクセルを出力できる。FP16 HDRテクスチャ(チャネルあたり16bit浮動小数)では、GeForce 8800は1クロックでバイリニアフィルタリングで32ピクセル、トライリニアおよび2:1異方性フィルタリングでは16ピクセルを出力できる。

 一方、Radeon HD 2900はFP16 バイリニアフィルタリング16ピクセル、トライリニアおよび異方性フィルタリングでの出力ピクセル数は8に留まる。

【Q】AMDは、ジオメトリシェーダのテストで50倍高速だと言っているが

【A】ジオメトリテストによってその結果は変わってくる。我々は「metaballs」というジオメトリシェーダテストを開発し、使っている。このテストでは、GeForce 8800の方がずっと高速だ。結局は、こういった機能を比較する有効なベンチマークソフトは、実際のゲームということになる。

【Q】なぜ「Call of Juarez」のDirectX 10デモはGeForce 8800で動作しないのか

【A】AMDが配布しているのはプレリリース版で、MSAAバッファの取り扱いにバグがある。ベンチマークを測るのには、メーカーからの正式版を使ってほしい。

【Q】Windows VistaのNVIDIAドライバはどの程度良くなったのか

【A】1月に出した最初のドライバ以降、数多くの改良を実施した。直近の3つのドライバでは200以上のバグを修正し、3D性能はWindows XPと同等になっている。新ドライバについては、報道およびユーザーから良い反応をもらった。5月に出すドライバでは、さらに性能が上がり、DirectX 10でのSLIにも対応した。現在も改良に向けた他の作業を行なっているが、今のバージョンでもWindows VistaとGeForceの組み合わせですばらしい体験ができる。

【Q】CFAAとCSAAの違いは

【A】2001年にGeForce 3を出したとき、我々は「Quincunx」と呼ばれるAA方法を実装した。このモードはAAを計算するのに、ピクセルごとに4つの隣接するサンプルを用いた。だが、報道およびユーザーからの反応は、絵がぼやけるという否定的なものだった。

 Radeon HD 2900は「Custom Filter AA (CFAA)」をサポートするが、その原理はQuincunxと同じものだ。選択したテントフィルタによって、CFAAでは4つから8つの隣接サンプルを使ってAAを計算する。テントフィルタによって、サンプルに対する重み付けを行なってはいるものの、このAA方法では必然的にぼやけが生じる。

 また、CFAAはハードウェアによるサポートを必要しないことも指摘すべきだろう。つまり、ドライバでのみ実行されるということだ。そのため、GeForce 8800もCFAAや、どんな種類の「カスタムフィルタ」モードもドライバのアップデートだけで対応できる。だが、我々はそうしない。ゲーマーはアンチエイリアス機能のために、画面全体がぼやけることを嫌うからだ。これが、我々がQuincunxでのサンプル数を増やさなかった理由だ。実際、サンプルを多くするほど、映像はぼやけてしまう。

 「Coverage Sampling AA (CSAA)」では、ぼやけることなく、真の16xカバー精度を提供できる。これはハードウェアでアクセラレートされたアルゴリズムで、CFAAよりも性能が高い。CSAAはDirectX 10でも採用されている。

【表】NVIDIAによるG80とR600の仕様比較
  GeForce 8800 GTX GeForce 8800 GTS Radeon HD 2900 XT
シェーダクロック 1,350MHz 1,200MHz 740MHz
シェーダプロセッサ 128 96 64
コアクロック 575MHz 500MHz 742MHz
バイリニアフィルタピクセル/クロック 32 24 16
バイリニアフィルレート 18,400MP/sec 12,000MP/sec 11,872MP/sec
INT16フィルタピクセル/クロック 32 24 16
FP16バイリニアフィルタピクセル/クロック 32 24 16
FP16トライリニア・2:1異方性フィルタピクセル/クロック 16 12 8
FP16バイリニアフィルレート 18,400MPixel/sec 12,000MPixel/sec 11,872MPixel/sec
FP16トライリニア・2:1異方性フィルレート 9,200MPixel/sec 6,000MPixel/sec 5,936MPixel/sec
FP32フィルレート 9,200MPixel/sec 6,000MPixel/sec 5,936MPixel/sec
ROPピクセル/クロック 24 20 16
ROP Z/クロック 48 40 32
ROPピクセル 13,800GPixel/sec 10,000GPixel/sec 11,872GPixel/sec
メモリインターフェイス 384bit 320bit 512bit
メモリクロック 1,800MHz(DDR) 1,600MHz(DDR) 1,650MHz(DDR)
メモリバンド幅 86.4GB/sec 64GB/sec 105.6GB/sec
フレームバッファメモリ 728MB 640MB/320MB 512MB

【お詫びと訂正】初出時に、Radeon HD 2900のFP16トライリニア・2:1異方性フィルタピクセル/クロックとFP16トライリニア・2:1異方性フィルレートが誤っておりました。お詫びして、訂正させていただきます。

□NVIDIAのホームページ(英文)
http://www.nvidia.com/

(2007年5月15日)

[Reported by wakasugi@impress.co.jp]

【PC Watchホームページ】


PC Watch編集部 pc-watch-info@impress.co.jp
お問い合わせに対して、個別にご回答はいたしません。

Copyright (c)2007 Impress Watch Corporation, an Impress Group company. All rights reserved.