Radeon HD 2000シリーズは頂点シェーダ、ジオメトリシェーダのパフォーマンスが、GeForce 8000シリーズと比べて異様に高速であることが指摘され始めている。これはなぜか。
AMD側の実験によれば、頂点/ジオメトリのパフォーマンスは頂点キャッシュの容量に依存した結果を示したという。
例えば、Radeon X1800シリーズとX1900シリーズとでは頂点シェーダの個数は同じ8基で、頂点キャッシュが倍化されただけなのだが(全体で4KB→8KB)、3DMarkの頂点負荷テストでパフォーマンスは30%も向上したのだという。この傾向を踏まえてRadeon HD 2000シリーズでは頂点キャッシュを32KBへと増強したというわけだ。
Radeon HD 2000シリーズは統合型シェーダアーキテクチャ採用により、専用頂点シェーダはなくなってはいるが、汎用シェーダユニットを全て頂点シェーダとして起用したときには従来換算でRadeon HD 2900シリーズでは64基分となり、単純計算でRadeon X1900シリーズの8倍のパフォーマンスが得られる。前述のキャッシュ容量増強との相乗効果で、AMDとしてはRadeon X1000シリーズの10倍の頂点パフォーマンスが得られるようになったと説明している。
また、既に一部の開発者の間から、Radeon HD 2000シリーズはジオメトリシェーダのパフォーマンスが高いことも指摘され始めている。AMD側の実験によればジオメトリシェーダ単体負荷テストでは、Radeon HD 2900 XTはGeForce 8800 GTXの50倍のパフォーマンスを示したと述べている。これにもRadeon HD 2000シリーズのキャッシュシステムの構造がうまく働いているとAMDは説明する。順を追って説明しよう。
図は全体ブロック図の左側にある「メモリ読み書きキャッシュ」(Memory Read/Write Cache)をクローズアップしたものだ。
DirectX 10/SM4.0パイプラインでは、ジオメトリシェーダからの出力を「ストリーム出力」(Stream Output)と呼ばれる仕組みでビデオメモリに出力する機能がサポートされている(図)。
ジオメトリシェーダの活用ではこのストリーム出力を再び頂点シェーダに戻して処理することが多いわけだが、このストリーム出力の書き出しは、この「メモリ読み書きキャッシュ」を経由して処理され、短期的にすぐその内容を再利用される際には実際のメモリアクセスを行わず、このキャッシュから読み出しが行われる。もちろん、キャッシュの内容は非同期に実際にビデオメモリへと書き出されるので、ここはいわばCPUでいうところのライトバックキャッシュのような仕組みになっているようだ。
ストリームを利用する側からみると、データがビデオメモリに載ってから読み出すのではなく、出てきたデータをすぐにキャッシュから取りだして処理を進められるのでストリーム出力とストリーム利用がオーバーラップできる。
Radeon HD 2000シリーズのジオメトリシェーダのパフォーマンスの高さはここにあるのだ。GeForce 8000シリーズはどちらかといえば、ジオメトリシェーダの仕組みをただ実装しただけなので、ここまでのパフォーマンスが発揮できない。
メモリ読み書きキャッシュの効能はジオメトリシェーダのパフォーマンス向上のためだけではない。統合型シェーダアーキテクチャの効率よい実行にも大きく貢献している。
汎用シェーダユニットの解説のところで、GPRは、スレッド切り替えのたびに、そのスレッドの途中データが格納されていくことで消費されていくと説明した。スレッド切り替えが度重なれば、いずれ、GPRが不足してきてしまうことは想像できるだろう。Radeon HD 2000シリーズでは、これに対処するために、このGPRを仮想化しており、GPRが不足してくるとビデオメモリに自動退避(スワッピング)する仕組みまでを実装している。この自動退避を高効率に行うのに、このメモリ読み書きキャッシュが一役買うことになる。短期的に再利用されるならばキャッシュからGPRが復元でき、そうでない場合は時間経過と共にビデオメモリの方に退避されていくのだ。