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

 ATIのDirector/Advanced Technology Marketingを務めるAndrew B. Thompson氏に,先頃発表されたばかりの新RADEON 9200/9600/9800シリーズについて伺った。

Andrew B. Thompson氏

ページ 1/3

■無限長のシェーダプログラムが実行可能な「RADEON 9800」。その秘密はFバッファにあり!

西川善司(以下,善):
 RADEON 9800(以下,R9800)のプログラマブルシェーダ命令セットは,RADEON 9700(以下,R9700)から何か変更されていますか?

Andrew B. Thompson(以下,ABT):
いえ,何も変わっていません。
善:
すると,プログラマブルシェーダ2.0+のようにはなっていないと?

ABT:
我々は,(2.0+のことが)あまり好きじゃないんですよ(笑) (*1)  あれは消費者を混乱させる要因になっていると思います。我々が重視しているのは,2.0,あるいは次世代の3.0ですね。  またR9700とR9800は,プログラマブルシェーダ仕様上の違いはないですが,R9800にはFバッファテクノロジをインプリメントしました。そのほか,R9800はマルチレンダーターゲット(Multi Render Target)関連でいくつかの仕様拡張が行われていますが,あまり大きく取り上げてはいません。(*2)
新RADEONの発表会では,長いピクセルシェーダプログラムを実行して,NVIDIA社製某GPUとのフレームレート比較を見せた
善:
R9800の新機能「Fバッファテクノロジ」について教えてください。

ABT:
我々のGPUは,これまでリアルタイム3Dグラフィックスのアクセラレーションを主眼としていました。今回のRADEON 9800シリーズからは,映画制作用CGのアクセラレーションも視野に入れ始めたのです。そのために実装した技術が,Fragment-stream Buffer,通称「Fバッファ」です。  Fバッファを実装することにより,いわゆる"オフラインレンダリングCG"が,CPUベースで描画させた場合よりも高速になり,多少のインタラクティビティまで兼ね備えるようになります。
善:
Fバッファは,スタンフォード大学のWilliam R. Mark氏などがSIGGRAPHで発表したテクニックですよね。

ABT:
そうです。Fバッファを使えば,プログラマブルシェーダ2.0の"仕様範囲外の長さ"をもつシェーダプラグラムを実行できるわけです。
善:
どういった仕組みになるんですか。

ABT:
それが意外と単純なんです。まず,長いシェーダプログラムの先頭の"ある長さ"の命令ブロックをGPUコアに送ります。続いて,命令実行後に得られた処理結果をテンポラリバッファ(テンポラリレジスタ)に一時保存し,次の命令ブロックをGPUコアにロードすると。そして先ほど一時保存した処理結果を引き継いでこれを基に実行……あとはこれを繰り返していけば,どんなに長いシェーダプログラムでも実行できるというわけです。例えば1000命令のシェーダプログラムを100命令ずつ実行するとしたら,10回パイプラインを回してやります。  もちろん長ければ長いほどフレームレートは低下しますが,それでも,今までのようにCPUで処理するよりは圧倒的に高速ですよ。
善:
頂点シェーダは動的フローコントロールを持っていますよね。ジャンプ命令などが発生した場合はどうなってしまうのですか?

ABT:
Fバッファテクノロジは,ピクセルシェーダ部にのみ有効です。そもそもピクセルシェーダ2.0には,動的フロー制御が仕様にないので,その問題は起こりえないわけです。
善:
CG映画「トイストーリー」などを制作したPIXARスタジオが提唱している「RENDERMAN」というシェーダ言語は,映画CGを始めとした"オフラインレンダリングCG用のシェーダ言語"のデファクトスタンダードになっていますが,それらを効率良く,しかも速く実行するための仕組み……という感じですね。

ABT:
RENDERMAN用のシェーダプログラムは,それこそGPU用のシェーダ命令に変換すると数千命令に相当するんです。
善:
これがCPUで実行するよりも速くなるということは,CG開発効率も向上するわけですね。

ABT:
もっとも,この技術は"中継ぎ"的なものでしかありません。今のFバッファ技術は,いわば「制限のあるハードウェアで,その制限を回避する工夫」という感じです。近い将来のGPUでは,Fバッファ無しで同様の処理ができるようになるでしょうね。現在,オフライン3Dグラフィックスの最終レンダリングはCPUで実行するのが主流ですが,この分野にも我々は進出を考えているわけです。

  (*1)NVIDIAがGeForce FXシリーズにインプリメントしているのは,プログラマブルシェーダ2.0+
  (*2)表示用フレームバッファと同時に,Zバッファ,ステンシルバッファに対してレンダリング処理ができるDirectX 9 Direct3Dの新機能


■RADEON 9800はなぜ0.15μmプロセスルールなのか

善:
R9800は,製造プロセスルールが0.15μmのままなのに,クロックスピードをRADEON9700の325MHzから380MHzくらいにまで引き上げられるそうですね。

ABT:
製造面でも,ブラッシュアップをかければ高クロック化が可能なんです。ちょうど,インテルがP6アーキテクチャをあそこまで高クロック化したようにね。ところが,GPUというのはゼロからデザインした新コアを毎年のようにリリースするわけだから,その余裕がないんです。(笑)
善:
R9800のトランジスタ数は,R9700と比べてどのくらい増えているのですか。

ABT:
+5%ほどです。具体的には,R9700よりも500万〜1000万多い程度でしょうか。R9800は,R9700を洗練・改良したもの,という感じなのです。Fバッファ関連のロジックはR9800で新規に追加されたものですが,テンポラリストレージを追加した程度なので,トランジスタの増加数は微々たるものです。ちなみにダイサイズもR9700と同じです。
善:
R9700の改良版がR9800であれば,なぜこのタイミングでプロセスルールを0.13μm化しなかったのですか?

ABT:
今回はR9700の改良ということもあり,既存の9700をベースにして設計作業を短期間に抑えられるという点,製造コストも安くでき,生産性も良いという点から,0.15μmを採用しました。R9800をゼロから設計していれば,0.13μmを採用したと思います。
善:
RADEON 9600(以下,R9600)は0.13μmプロセスルールを採用していますね。

ABT:
そうです。我々も,もう0.13μmプロセスルールを利用できる立場にいるんですよ。ただ,今回はあえてそれをしなかったというだけです。我々は0.15μmプロセスルールに関してのノウハウを蓄積していますし,だからこそ,R9800をここまで高クロックで駆動できるんです。
RADEON 9800発表会では,同チップの製造中の映像をビデオで流した。いうまでもなく,発表から4か月経っても製品が出荷されなかったGeForce FXに対する当てつけだ


■NVIDIAのCgに対抗。ATIも高級シェーダ言語を開発中!?



ABT:
実は,我々は現在,OpenGL2.0向けの高級シェーダ言語「GL2」を鋭意開発中です。
善:
ATI主導で開発が進んでいるのですか?

ABT:
開発チームを結成して,他社と共同で開発中です。おそらくあと6か月もすれば発表できると思います。
善:
現在どういう状況なんですか?

ABT:
スペックや言語体系の策定はほぼ終えています。今は,非常に長いシェーダプログラムを実際にプロトタイプドライバで動かす……といったことをやっています。


■"内部24ビット精度問題"は,RADEON 9800で改善されているのか

3Dグラフィックスは,実数ピクセルを利用したハイダイナミックレンジ(HDR)にシフトし始めている。画面は川瀬正樹氏制作のDirectX 9対応HDRデモより
善:
「NVIDIAのGeForce FXとATIのRADEONでは演算精度に違いがある」という情報が飛び交っていますね。各色チャネル32ビット(*3)浮動小数点実数ピクセルを取り扱ったとき,GeForce FXはその通り32ビット演算が行われるが,R9700では24ビット演算に丸められる……という。この仕様について,R9800は改善が施されていますか?

ABT:
R9800は,頂点シェーダは32ビット実数演算が行われますが,ピクセルシェーダはおっしゃるとおり,R9700同様に24ビット精度になっています。
善:
GeForce FXはそのせいで遅いという見方もあるようですね。

ABT:
我々は,現実的にパフォーマンスと精度に優れた内部24ビット実数演算のピクセルシェーダを採用したのです。  DirectX 8世代GPUまでのピクセル演算器は,8ビット整数演算器×4(αRGB)でした。これをすべて32ビット実数演算器×4(αRGB)という構成にすると,チップ化した場合のトランジスタ数が膨大になってしまい,コスト的に苦しいと判断したのです。
善:
24ビット演算精度で問題は出ませんか?

ABT:
ご存じのように,こうした実数ピクセルという概念は,たくさんの色を出すためのものではなく,ピクセル演算の誤差をなくすためのものです。
善:
「繰り返し色演算を行うと整数や固定小数点実数で誤差が蓄積されて,正しい結果が得られない」という問題を改善するために生まれたんですよね。

ABT:
現行の3Dリアルタイムグラフィックスは,パイプラインを回すとしても数回ですし,「演算誤差」という見地から見ると,この程度の演算回数なら24ビット精度の実数でもまったく問題ありません。
善:
次期RADEON(R400)は32ビット化されますかね。

ABT:
公式な見解ではありませんが,内部32ビット化は自然な流れですからね。それこそ,長い目で見れば64ビット化されることだってあるかもしれません。CPUだってそうじゃないですか。IntelやAMDが32ビットCPUアーキテクチャから64ビットCPUアーキテクチャに移りつつあるでしょう?(笑)
  
  (*3)αRGB,各色チャンネルが32ビット実数なので,1ピクセルは32ビット×4=128ビット表現となる。

ページ 1/3