善: R9800で命令セットレベルでの拡張がないとすると,R9800はR9700のクロックアップ版として捉えればよいのでしょうか。
ABT: 改良点としては,メモリコントローラの最適化も挙げられますね。これによってR9700よりも,ずいぶんメモリパフォーマンスが向上しています。
善: グラフィックサブシステムにおいて,ビデオメモリパフォーマンスの向上は描画パフォーマンスの向上に直結しますから,意味のある改良点だといえますね。
ABT: そうです。メモリパフォーマンスの向上は,テクセルの取り出しやアンチエイリアス処理の高速化にも繋がります。アンチエイリアス処理には,フレームバッファやテクスチャバッファからのサンプル処理がありますからね。
 |
| 大元のZバッファを4×4単位で見て,その代表値から1/4サイズの縮小型Zバッファを作成。さらに2×2単位で見てその代表値からさらに1/4サイズの縮小型Zバッファを作成する。例えば1024×768ドットの場合,縮小型Zバッファのサイズは256×192ドット 64×48ドットになる。64×48ドットの縮小型Zバッファは,容量的にはたかだか12KBなので,オンキャッシュ動作できる……というわけ |
善: 具体的にどの程度高速化されたのでしょうか。
ABT: R9700をオーバークロックしてR9800と同クロックにし,アンチエイリアス付きでシーンをレンダリングさせたところ,R9800のほうが圧倒的に高速だったという実験結果が得られています。
善: 具体的にはどのような工夫がなされているのですか?
ABT: ページ境界をまたいでメモリアクセスしないほうが速いとか,そういった基本的な最適化も行っていますが,それ以上に,極力パイプラインの上流で隠面消去するというような工夫もしています。
善: 無駄なピクセル描画を減らすことによってメモリアクセスを節約するというアプローチですね。
ABT: 理想は,画面上の各ピクセルを一度しかレンダリングしないことです。完璧に前から後ろに向かってオブジェクトを並べ,隠れているオブジェクトは描画リストから排除する……と。でも現実的にはうまくいかなくて,1ピクセルを何度も描画することになってしまうわけですが,まぁとにかく我々はこの部分のロジック強化に力を入れたわけです。
善: 具体的にいうと?
 |
| 実際の階層的Zバッファの様子(「SIGGRAPH 2002」にて発表されたNed Greene氏の論文「Visibility Culling」より) |
ABT: 新たに描画する4×4ピクセルブロックが,すでに描画されている4×4ピクセルブロックに対して前面に来るのか背面に来るのかを判断します。もし背面に来たら,そのブロックを描画リストから排除します。そうすると描画しなくてもよい部分が増えるので,データ処理にかかる時間が節約できます。
善: 階層的Zバッファ(Hierarchical Z-Buffer)による早期Zカリング(Early Z-Culling)ですね。
ABT: そうです。これにより,排除されたブロックに適用するはずだったテクスチャマッピングも不要になるため,テクスチャフェッチ,読み込みが不要になります。またピクセル描画も不要ですから,ビデオメモリへの書き込みもいりません。これによりビデオメモリ帯域を劇的に節約できます。
善: これは従来のRADEONシリーズがもっていた機能ですよね?
ABT: 初代RADEONのHyperZがそうですね。RADEON 8500(以下,R8500)ではHyperZII,R9700でHyperZIII,R9800でHyperZIII+となりました。今回,R9700に対してさらに最適化を推し進めたというわけです。
善: メモリコントローラそのものは,どのように最適化したのですか?
ABT: メモリコントローラは,内部のさまざまなクライアントブロック(テクスチャユニット,頂点シェーダユニット,ピクセルシェーダユニットなど)に接続されています。各部へのメモリバスを解析し,パイプラインを停止させるような要件を一つ一つ潰していったという感じです。
|