ROPユニットはどう進化したか

今度は双方のブロックダイアグラム下側に目を向けてみよう。

レンダリング結果を出力する機能ブロックはNVIDIAはROP(Rendering Output PipelineまたはRendering Output Processor)ユニットと呼び、ATIはレンダーバックエンド(Render Back-Ends)と呼ぶが、共に同じものを指している。まずはこの部分に注目してみることにする。

GeForce GTX 280の全体ブロックダイアグラム

GeForce GTX 280のROPユニットは全体ブロックダイアグラムの下段の8個の大きな箱の部分にあたる。GeForce 8800 GTXではこの箱が6個、GeForce 9800 GTXでは4個が搭載されていた。今回のGeForce GTX 200シリーズの開発にあたってはこの部分についても順当な規模拡張が行われたことになる。

GeForce GTX 200シリーズの各ROPユニットには赤い■と黒い■が描かれているが、赤い■がピクセル関連のROPユニット、黒い■はZ値(デプス、深度)関連のROPユニットを表しており、各ROPユニットあたり赤黒が16基ずつ(合計32基)が搭載されていることが分かる。4つの■で1ピクセル分(例、αRGBの四要素ピクセル)とすれば、1サイクルあたり1ROPユニットで4ピクセル+4Zの出力が出来ることになる(16■÷4要素ピクセル)。つまり、GeForce GTX 280の場合、ROPユニットが8基あるので、全体では1サイクルあたり32ピクセル+32 Z値のサンプリングと出力が可能ということになる(4ピクセル×8ROP+4Z×8ROP)。もちろん、従来のGeForce同様に、カラー関連の処理を行わなければ,64Z値の出力を行える。

ROPユニット周辺のクローズアップ・ダイアグラム

いずれにせよ1サイクルあたり32ピクセルのスループットが可能なので、"DirectX 9世代以前のレンダリングパイプライン風"のROP換算方法で行けばGeForce GTX 280のROPユニット数は32基相当、GeForce GTX 260は28基相当になったことになる。

この強化は3Dゲームグラフィックスにおいて、高解像度設定時のパフォーマンス向上に直接効いてくるため、かなり強力な改良といえる。

さらに、このブロックダイアグラムには記載されていないが、ROPユニット一つ当たりのBlender Logicも倍増され、1サイクルで4ピクセルのブレンドが可能になっている。つまり、Geforce GTX 280では全体で1サイクルあたり32ピクセルのブレンドが可能となった。GeForce 8800/9800シリーズのブレンド性能は1ROPユニットの1サイクルあたりのブレンドスループットは2ピクセルで、GeForce 8800 GTX全体で12ピクセル、GeForce 9800 GTXで8ピクセルであった。GeForce 9800 GTX比でブレンド処理の4倍の高効率化は大きな改善ポイントだといえる。ブレンド性能の向上は半透明描画に貢献するため、GeForce GTX 200シリーズは半透明オブジェクトやパーティクル、ポストプロセス処理においては先代よりもかなり優秀な性能を発揮することになる。

GeForce 8800 GTXとGeForce 280 GTXとのスペック比較

ROPユニットの上に配されたAtomicユニットとTex L2ユニットについても解説しておこう。

AtomicユニットはGPGPUモード時にビデオメモリ・アクセスを司るユニットで、ピクセルというフォーマットに囚われずメモリの読み(Gather)書き(Scatter)を行う。一言でいうならばGPGPUモード時にシェーダコアとメモリシステムの橋渡しを行う機能ブロックということになる。ROPユニットのようにGeForce GTX 280では8基、GeForce GTX 260では7基が搭載されている。

Tex L2はその名前の通り、二次テクスチャキャッシュメモリだ。内部スレッドが1万個以上走っているシェーダコアからの膨大なメモリ読みだし要求を吸収/低減させる役割を果たす。

Radeon HD 4800シリーズのレンダーバックエンド(=ROPユニット、以下同)も、全体ブロックダイアグラムの下段の方にある。メモリコントローラの上にある合計4基の機能ブロックがそれだ。

Radeon HD 4800シリーズの全体ブロックダイアグラム

各レンダーバックエンドは、1クロックあたり、2×2の4ピクセル(4テクセル)出力が可能であり、4ピクセル×4ブロック=16ピクセルとなる。

つまり、"DirectX 9世代以前のレンダリングパイプライン風"のROP換算で行けば16基ということになる。

ROPユニットの個数はRadeon HD 2900/HD 3800シリーズから変更はないものの、Radeon HD 4800シリーズのROPユニットはかなり凝った改良が施されている。

確かに1サイクル16ピクセルスループットなのだが、その各レンダーバックエンドにおけるブレンド処理ユニットとMSAA(Multi Sampling Anti-Aliasing)処理ユニット「Programmable MSAA Resolve」に対して、64ビットカラー(FP16のαRGBなど)まで16ピクセル出力が出来るように改良されている。

つまり、いわゆる16ROPではあるが、32ビットピクセルの16ROPではなく、64ビットピクセルの16ROPに強化された……と言い換えてもいいだろう。言い方を変えれば、64ビットカラーデータの書き出しに限っては、先代までのGPUの32ROP相当の出力がこなせるということだ。しかし、あくまで出力先はカラーキャッシュ(COLOR CACHE)に対してで、実メモリに対しての出力ではないので、単純に先代比2倍とは言い切れない。とはいえ、それでも、後述のGDDR5の広帯域が組み合わせることで高いパフォーマンスは発揮されるはずだ。

さらに、デプス(Z)/ステンシルの処理ユニットが倍増化されたところも、Radeon HD 2900/HD 3800シリーズから大きく変更された部分といえる。これは直接的にはデプス入出力、ステンシル入出力を二倍にしてくれる効果があり、影生成等の加速化に貢献する。

Radeon HD 4800シリーズのレンダーバックエンド。デプス/ステンシルの処理ユニットが倍増し、カラー処理ユニットがネイティブ64ビットカラー対応になった

Radeon HD 2900/HD 3800シリーズのレンダーバックエンド

また、間接的にはMSAA実行の高効率化にも結びつく。

MSAAでは、アンチエイリアス処理に用いる情報のうち、全てのサブピクセルの色の値を、単一のピクセルシェーダからの出力としてしまう大胆な近似を行うが、サブピクセルの位置のZ処理(デプス処理、深度情報処理)については、MSAAパラメータの2X、4X……といった倍率値分の解像度の処理を行う。Radeon HD4800シリーズでは、レンダーバックエンドのZ/ステンシルの処理ユニットが倍増されているので、サブピクセルのZ処理のスループットについては2倍の効率で行うことができ、MSAA 2X時でもパフォーマンス低下を起こさずに済む(遅くならない)。MSAA 4X時も性能低下が無いことになっているが、これは隣接したサブピクセルのMSAA 2X時のサンプル値を再利用することで処理することで実現できるため(キャッシュシステムの有効利用)。先代Radeon HD 2900/HD 3800シリーズでもMSAA 2X/4X時のパフォーマンスが共通なのはそのためだ。

なお、デプス/ステンシルの処理ユニットは倍増化はされたものの、こちらも入出力自体はキャッシュに対して行われるのでリニアな性能向上は約束されない。とはいえ、やはり同じく後述のGDDR5の広帯域が組み合わされることで、一定の高パフォーマンスは期待できる。

ここで、ROPシステム(レンダーバックエンド)についてGeForce GTX 200シリーズとRadeon HD 4800シリーズとを比較してみよう。

GeForce GTX 280は1サイクルあたり
・32ビットピクセル32個 + 32個のZ値出力
・64ビットピクセル16個 + 32個のZ値出力
・64個のZ値のみの出力

GeForce GTX 260は1サイクルあたり
・32ビットピクセル28個 + 28個のZ値出力
・64ビットピクセル14個 + 28個のZ値出力
・56個のZ値のみの出力

Radeon HD 4870/HD 4850は1サイクルあたり
・32ビットピクセル16個 + 32個のZ値出力
・64ビットピクセル16個 + 32個のZ値出力
・64個のZ値のみの出力

が出来る。32ビット・ピクセル出力に関してはGeForce GTX 280有利、64ピット・ピクセル出力とZ値のみ出力に関しては両者は同等ということが分かる。Radeon HD 4870はベースクロック4倍データレートのGDDR5が組み合わされるので、32ビットピクセルの出力も、実効速度で比較すればGeForce GTX 200シリーズにそれほど大きく引き離されることはないはずだ。