〜NVIDIAチーフサイエンティスト〜

David Kirk博士インタビュー

Text & Photo by トライゼット西川善司

ページ 2/3



■GeForce FX 5900はFX5800の改良版


―――FX5900とFX5800では,トランジスタの差が500万程度しかありませんね。これだけのトランジスタ予算の中で,FX5800の2倍のFP実数演算性能を実現できるものなのでしょうか?
Kirk:
 インプリメントにはさまざまな手法がありますからね。我々は実際にプロセッサを追加していますが,別の部分ではトランジスタの削減もしているのです。もちろんパフォーマンスが落ちない形でですが。

―――一般ユーザーは,FX5900がFX5800の2倍のピクセルシェーダユニットを搭載したと思っていますが,実際にはFP実数演算器を増設したという感じなのですね。
Kirk:
 そうです。FX5900はFX5800の構成を2倍にしたものではなく,FX5800をベースにして浮動小数点実数演算能力を2倍にし,さらに内部構成を改変したものなのです。

 先ほども話したように,仮想的なピクセルパイプラインは浮動小数点実数演算とデータパスの組み合わせでできています。そしてFX5900の浮動小数点実数演算能力を2倍に高めましたが,データパスは2倍になっていません。我々は,2倍の浮動小数点実数演算能力が優位に働くように,内部演算器のパイプライン構成を再編したのです。

―――FX5800に施された改良とは,2倍のFPシェーダユニットの増設ではなくて,クロックあたり2倍のFPシェーダ処理の実現,というわけですか。
Kirk:
 そうです。我々はスループットを解析し,その結果,浮動小数点実数演算能力を強化することができました。冒頭でも述べたように浮動小数点実数演算能力は2倍にまで高められたわけです。そして演算器の能力を生かせるアプリケーションでは,2倍以上のパフォーマンスを発揮すると思います。

Cgで作成した屈折付き環境マッピングの例。CgのWebサイトにはCgのデモソフトがあり,こうしたデモを実際のシェーダのソースリストと共に閲覧できるブラウザソフトも公開されている
―――先ほど積和算器を増設したという話がありましたが,そうするとFX5900はFX5800よりも積和算演算速度が速いといってよいのでしょうか。
Kirk:
 速度についてはなんともいえませんが,並列処理能力が高いので,一度に何ピクセル分かの処理が可能にはなっています。一つの演算器で二つのベクトルの演算がこなせます(*14)。

―――こうした演算処理能力は「DSP」に似ていますね。
Kirk:
 そうですね。確かにGPUとDSPには似た点はありますが,GPUのほうが柔軟性があってパワフルだといえるでしょうね。処理内容や実行するプログラムもGPUの方が複雑ですし。
 それにDSPのプログラム作成は非常に難解です。我々は多くの開発者に斬新なシェーダを書いてほしいので,プログラマビリティには非常に気を遣ってきました。だからこそ高級シェーダ言語「Cg」をリリースしたのです。

(*14)(W1,X1,Y1,Z1)・(W2,X2,Y2,Z2)のようなベクトルの内積演算など。

―――最新のFX5900シリーズも含めたGeForce FX全シリーズで,色演算とZバッファ操作を同時に行ったときのスループットが4PPC(*3)ですね(「こちら」のスペック比較表参照)。これを見ると,Zバッファやステンシルバッファなどの操作は,上位のFX5800以上は8PPC,下位のGeForce FX 5600(以下,FX5600)以下では4PPCと,2倍のパフォーマンス格差が与えられています。この「格差」はどのような理由で付けたものなのですか?
Kirk:
 現在のほとんどの3Dアプリケーションは,GPUの演算能力に依存した設計になる傾向があります。
 具体的には,シェーダ演算とテクスチャ演算の能力,……言い換えればただのデータスループットですね。さまざまなゲームソフトを解析すると,そのデータスループットのボトルネックは「色演算とZバッファ操作の部分ではない」という結論に達しました。
 そこで我々は,上位モデルに対して「速くなるべき要素が速くなるためのGPU設計」を行ったというわけです(*4)。

―――以前「GDC 2003」で,NVIDIAのGeoff Ballew氏にインタビューしたときに,彼は「FX5800の32ビットFP実数スループットはクロックあたり4,整数スループットも4だ」と言っていました。FX5900についてはどうでしょう?
Kirk:
 2倍になっています。

(*3)PPC=PIXEL PER CLOCK。クロックあたりのピクセルスループットの意
(*4)色演算とZバッファ操作の組み合わせ以外で速くなるようなアーキテクチャにしたということ

最近の3Dゲームで頻繁に採用されるステンシルシャドウボリューム技法では,Zバッファとステンシルバッファへのアクセスが頻発する。この部分が高速になれば,シーン全体の描画が速くなる。画面は,左が最終的なレンダリング結果,右がステンシルバッファの内容を可視化したものだ


■NVIDIAが先行で32ビット精度を採用した本当の理由


―――ATIは24ビット精度のシェーダユニットを採用しています。これに対して,NVIDIAは32ビット精度にしていますね。この思想の違いは何でしょうか?
Kirk:
 興味深い質問ですね。私は何をするにも24ビット精度というのは,高すぎる場合もあるし,低すぎる場合もある,要するに"中途半端"だと思うのです。

―――精度がそれほど必要ない16ビット精度演算のときには24ビットでは精度が高すぎるし,高精度演算(32ビット精度演算)をするときには24ビットでは精度が足りない……という意味ですね。
Kirk:
 そうです。"本当の数学"をやろうとした場合,例えばテクスチャアドレッシングや方向ベクトルの算出,バンプマッピング,そのほかのあらゆるジオメトリ計算を行う場合には,,24ビットでは精度不足です。きっとエリアス(ジャギー)を見ることになるでしょう(*5)。我々は"今"だけでなく,"将来"のことも考える必要があったのです。
 その将来とは,GPUが計算機の世界で市民権を得ることであり,そのためには,GPUが世界規格と同等の精度で計算が行える必要があります。そんななか,奇妙な24ビットなどというフォーマットを採用するわけにはいかなかったのです。

―――そこで32ビット精度,あるいは16ビット精度という標準規格を選んだわけですね。
Kirk:
 はい。24ビットフォーマットなんて現存する規格と互換性がないですし,どこも標準規格として採用していませんからね。
 ちなみに我々が採用したのは「IEEE754」フォーマットです。これはインテルやモトローラプロセッサが採用し,科学技術計算でも用いられているフォーマットです。このフォーマットにすることで,プログラマブルピクセルシェーダにフル精度のジオメトリ計算が可能なポテンシャルをもたせるのに成功しました。これは髪の毛シェーダや毛皮シェーダ,バンプマッピングなどのベクトル計算に有用です。
 ユーザーは,32ビット精度の浮動小数点実数を使っている限り,演算精度を心配しなくてもいいのです。

―――開発者にもそのほうが親切というわけですね。
Kirk:
 そうです。またこれは映画業界との親和性も考慮した結果なんです。CGが映画に使用されるようになって久しいですが,あれらはすべて32ビット精度でオフラインレンダリングしています。我々は,映画業界とゲーム業界の"CG開発コミュニティ"を統合することが重要だと考えているのです。

現在コンシューマとPC版で発売中の「ENTER THE MATRIX」。言わずと知れた大人気SF映画「マトリックス・リローデッド」のストーリーを補完する作品。このゲームは,映画版のCGセットデータやモーションデータを共有して開発が進められた
―――もしもGPUの演算精度が映画業界とゲーム業界とで同じなら,シェーダプログラムが流用できますし,同じクオリティの映像が出せる……と。
Kirk:
 そうです。一つ良い例があります。現在劇場公開中の「マトリックス・リローデッド」と,発売中のゲーム「ENTER THE MATRIX」です。
 このゲームは,映画用とゲーム用にそれぞれ作成されたCGコンテンツを,お互いに流用しています。もし演算精度が同じならば,このようなことが簡単にできるのです。

 ともあれ,来年になれば誰も「24ビット精度」なんてキーワードは語らなくなると思いますよ(笑)

―――それは,GPU業界全体が0.11μmや90nmといったプロセスルールに移行するからですね?
Kirk:
 そうです(笑)。ほとんどが32ビット精度に移行するでしょう。

(*5)DOS/V magazine 5月15日号掲載の実験によれば,演算誤差によるエリアスが発生したのはGeForce FXシリーズのほうだった。これは32ビット精度を指定しても16ビット精度で演算されてしまうGeForce FXの謎が生んだ弊害。



■32ビット精度 vs 24ビット精度

―――CPUには,32ビット演算器で16ビット演算を二つ同時に行うものがありますが,GeForce FXのGPUはどうなんでしょう?
Kirk:
 できます。演算もそうですが,より重要なのはストレージ(レジスタ)とデータパスです。先ほどデータパスのビット幅の話がありましたが,テンポラリの値が16ビット浮動小数点実数(FP16と表記)とすると,32ビットレジスタにはこれを2個格納できますね。
 話を映画業界に戻しますが,彼ら……そう,ILMやPIXAR,ディズニーなどでは,映像をFP32でレンダリングしますが,最終的な演算結果の格納はFP16で行っているのです。映像をHDDに書き込むときにも,FP32では大き過ぎるので,FP16で記録します。

―――レンダリングが終わってしまえばFP32の精度は必要なく,FP16でも十分なんですね。
Kirk:
 そうです。FP16でもダイナミックレンジは十分ですし,オーバーブライト(グレア)や負値の表現,仮数部のビット数も十分です。GeForce FXシリーズのFP32テンポラリレジスタは,2個のFP16データを格納できます。

―――つまり,取り扱うデータサイズが変化すると,先ほどおっしゃっていた仮想的なパイプラインは増減するわけですね?
Kirk:
 その通りです。

―――FX5800以下場合,FP16とFP32のパフォーマンスを比べるとFP16のほうが速いという現象があったそうですが,FX5900も同じようなことが起こり得るのでしょうか?
Kirk:
 FX5900は,全方位的にFP実数演算能力を高めていますから,そうした現象は起こりにくいと思います。

スポットライトをティーポットの3DモデルにあてたときのシーンをFP実数次元でレンダリング。こちらはGeForce FX系でのレンダリング結果だ。32ビットFP実数精度で演算されているはずが,エリアシングが出てしまっている RADEON 9500クラス以上のグラフィックスチップでのレンダリング結果。24ビットFP実数精度を採用しているはずのRADEON系のほうが美しい。これはいったいなぜ?


■256ビット化されたビデオメモリバス 〜IntelliSampleHCTとは?


―――GeForce FXファミリーはテクスチャアドレッシングユニットが16基あると説明されていますが,これはテクスチャへのアクセスが16個同時に行えると考えていいんですか?
Kirk:
 どんなフィルタリングモードを使っているかに依存しますが(*6),基本的にはそうです。

―――ビデオメモリインタフェースのビット幅がFX5900ではFX5800の2倍になっていますね。128ビットから256ビットに拡張した以外に,変更点はありますか?
Kirk:
 FX5900は,これはビット幅にもいえることですが,DDR1とDDR2の両方に対応したということが大きいでしょうね。

―――なぜ128ビットから256ビットに拡張したのですか?(*7)
Kirk:
 それはFX5800がより多くのビデオメモリバンド幅を使いきるポテンシャルをもつことに気付いたからです。つまり,FP実数演算能力が向上するとより多くのビデオメモリバンド幅が必要になり,トータルバランスを保つためには256ビット化が必要だったのです。

―――FX5900では「IntelliSampleHCT」という機能が搭載されていますね。この機能のメカニズムを教えてください。
Kirk:
 これは圧縮技術です。初代GeForce FXシリーズは「色」と「Z値」の4:1ロスレス圧縮が可能な「intelliSample」ロジックを搭載していました。これはロスレス(*8)なので圧縮効率が悪いのですが,それでもメモリバンドの節約には貢献していたのです。IntelliSampleHCTを簡単にいうと,intelliSampleの次世代のロジックであり,より効率的なロスレス圧縮技術をインプリメントしたものになっています。
 メモリバンドは,色演算とZ値のレンダリング時に発生するビデオメモリの読み書きで徐々に占有されますが,これの節約に貢献するのがIntelliSampleHCTなのです。

(*6)テクセルの取り出しは,ビデオメモリからテクスチャをただ読み込むものではない。同時にバイリニアやトライリニア,異方性といったフィルタリング処理を行うわけで,その負荷によってテクセル取り出し速度は変わってきてしまう。
(*7)GeForce FX 5800が登場したとき,NVIDIAは128ビットで十分だと主張していた。ちなみに競合機ATI RADEON9700は先に256ビット幅を採用している。
(*8)可逆圧縮の意。

左がバイリニアフィルタリング,右が異方性フィルタリング。左側は看板の真ん中から奥がボケボケになってしまっているのに対し,右側は自然に描画されている。こうしたフィルタリング処理も,IntelliSampleHCTの効果で高速に作り出せる

ページ 2/3