連載
西川善司連載 / “ビッグマイナーチェンジ”で飛躍する「ATI Radeon HD 4800」(後)
SIMD Coreには,極めて興味深い拡張が施された。
それは「Local Data Share」と呼ばれる,容量16KBの共有メモリで,ズバリ,GeForce GTX 200シリーズにおいて1基のStreaming Multi-processor(=8基のSP)で共有される「Local Memory」(ローカルメモリ,LM)に相当するものだ。Local Data Shareは,SIMD Unit(=5SP)で実行したスレッドの結果を,ほかのSIMD Unitで共有,そして連携するために利用される。
また,SIMD Core(=16SIMD Unit)をまたぐようなデータ共有,データを媒介とした処理連携のために,やはり容量16KBの「Global Data Share」も搭載されている。
これら2種類のData Share――ローカルメモリは,「スクラッチパッド」と呼ばれる多目的メモリ的な活用に対応しており,言ってしまえばGPGPUで利用するために設けられた機能だ。3Dグラフィックス用途,要するに“ATI Radeon HDモード”ではキャッシュメモリに使われる程度だと思われるが,実装自体は,「単なるキャッシュメモリ用」に留まっていない。
なおキャッシュメモリといえば,HD 2900 XT以降,HD 4800シリーズまで共通して,「Memory Read/Write Cache」が搭載されているが,これはジオメトリシェーダからの出力や,DirectX 10の新機能であるストリーム出力などといった,シェーダコアからの出力をバッファリングするためのもの。前出のData Shareとは役割がまったく異なる。
テクスチャユニットはSIMD Core当たり1基,専任のものが接続されている。ここはHD 2900 XTやHD 3800シリーズと同じだ。これら従来製品ではSIMD Core数が4基だったため,ぶら下がるテクスチャユニットも4基だったが,HD 4800シリーズでは,SIMD Coreが10基になったので,テクスチャユニットも10基となっている。
AMDが公開している資料だと,テクスチャユニット数は40基と記載されていたりもするが,これはテクスチャユニットのクロック当たりスループットが,バイリニアフィルタ・テクセル4個分であるため。バイリニアフィルタリング適用済みFP32テクスチャのクロック当たりスループットが1基当たり4テクセルなので,全体としては40テクセルであることを受けた,数字のマジックだ。
ちなみに同じカウント方式を採用すると,GeForce GTX 280のテクスチャユニット数は80基となり,この部分だけで比較すればGeForce GTX 280に軍配が上がる。
HD 2900 XTのテクスチャユニット概念図
ところでHD 4800シリーズのテクスチャユニット1基1基が持つポテンシャルそのものは,HD 2900 XTやHD 3800シリーズと同じ。右の図は連載バックナンバー「ATI Radeon HD 2000シリーズのGPUアーキテクチャ徹底解説」で示したHD 2900 XTのテクスチャユニットで,「Texture Address Processor」(テクスチャアドレス計算器)や「FP32 Texture Sampler」(テクスチャサンプラ)の数が異なっているように見えるが,実際のところは「HD 4800シリーズのブロックダイアグラムが簡略表記されている」だけだ。このあたりの詳細はバックナンバーを参照してほしい。
テクスチャユニットそのものに大きな変革がない一方,テクスチャユニットを取り巻くアーキテクチャには大きな改良が施されている。
HD 2900 XTやHD 3800シリーズでは,容量32KBのテクスチャ用L1キャッシュがテクスチャユニット全体で共有される設計になっていたが,HD 4800では,これをテクスチャユニットごとに――遡って言えばSIMD Coreごとに――専用のL1キャッシュと結ぶアーキテクチャになった。HD 4800シリーズのL1キャッシュは1SIMD Core当たり16KB。従来製品だと等分計算で「32KB÷4基のSIMD Core=8KB」なので,1SIMD Core当たりの割り当てという観点では倍増したことになる。
このアーキテクチャ変更は,SIMD Core数が従来の4基から10基に増えたことで,SIMD Coreごと行われるテクスチャアクセスの局所性が高まることへの対処だ。つまり,「全体としては分散したメモリアドレスにアクセスしているように見えても,SIMD Core単位で見ると比較的集中したメモリアドレスへアクセスしている」といったようなケースに対応するためである。
なお,HD 2900 XTやHD 3800シリーズで頂点キャッシュ(Vertex Cache)はL1キャッシュと共有設計となっていたが,HD 4800シリーズでは分離され,独立管理される。もっとも,依然として全SIMD Core(すなわちシェーダコア全体)で共有される設計のままではあるが。
「この内部高速バスとリファインされたキャッシュシステムの相乗効果で,テクスチャユニットの実効性能は競合を上回る」とAMD。HD 4800シリーズのテクスチャユニットの数の少なさは,十二分にカバーできているとする
一方のL2キャッシュは,容量非公開。4基ある64bitメモリコントローラに専属する形での実装となる。ただし,L2キャッシュとL1キャッシュはクロスバー接続されるため,L1キャッシュ側からはすべてのL2キャッシュとメグラフィックスメモリの透過的アクセスがサポートされている。
AMDは,GPUの内部バスに相当な力を入れて設計したとのことで,L1キャッシュのフェッチ速度は480GB/s,L1およびL2キャッシュはクロスバーを介した状態で384GB/sという,極めて広い帯域幅を実現しているという。
Render Back-Ends(レンダーバックエンド),一般的なGPU用語でいうところのROPユニット(ROP:Rednering Output Pipeline)もHD 4800シリーズで大きく改良が施された部分だ。順を追って解説していこう。
まず,Render Back-Endsは,HD 2900 XTやHD 3800シリーズと同じく4ブロックが搭載されている。
各Render Back-Endsは1クロックで2×2の4ピクセル(4テクセル)出力が可能で,4ピクセル×4ブロック=16ピクセルとなるため,従来の数え方でいえば,Render Back-Ends数は16基ということになる。1サイクルで16ピクセルスループットという点では従来と同じだ。
ただし,HD 4800シリーズでは,各Render Back-Endsにおけるブレンド処理ユニットとMSAA処理ユニット(Programmable MSAA Resolve)に対して,64bitカラー(※FP16のαRGBなど)まで16ピクセル出力を行えるように改良されている。「いわゆる16ROPではあるが,32bitピクセルの16ROPではなく,64bitピクセルの16ROPに強化された」,あるいは「64bitカラーデータの書き出しに限っては,HD 2900 XTやHD 3800シリーズにおける32ROP相当の出力をこなせるようになった」と言い換えてもいいだろう。ここは従来から大きく変更された部分といえる。
64bitカラーデータ出力はあくまでカラーキャッシュ(Color Cache)に対してであって,実メモリに対してのものではない。そのため,単純に従来比2倍の性能と言い切れないところはあるが,それでも,後ほど詳しく述べるGDDR5の広帯域幅を組み合わせることで,十分に高いパフォーマンスが期待できる。
もう一つ,分かりやすい改良ポイントは,Z(デプス)/ステンシルの処理ユニットが倍増された点だ。
これは直接的にはZ(デプス)入出力,ステンシル入出力を2倍にしてくれる効果がある(※入出力自体はキャッシュに対して行われるので,ブレンド処理ユニットと同様,リニアな性能向上は保証されない)のだが,それだけではなく,MSAA(マルチサンプル・アンチエイリアシング)の高効率実行にも結びつく。
HD 4800シリーズ(左)とHD 2900 XT(右)のRender Back-Ends。HD 4800シリーズでは,Z/ステンシル処理ユニット(※「Depth Stencil」の部分)数が倍増している
MSAAでは,アンチエイリアシングに用いる情報のうち,全サブピクセルの色の値を,単一のピクセルシェーダからの出力としてしまう大胆な近似を行うが,サブピクセルの位置のデプス処理(=Z処理,深度情報処理)については,MSAAパラメータの2x,4x……といった倍率値分の解像度の処理が要求される。
このとき,HD 4800シリーズのRender Back-Endsでは,サブピクセルのZ処理スループットが2倍となり,2x MSAA 時のパフォーマンス低下を起こさずに済む(=遅くならない)。AMDが公開している資料だと,4x MSAAで性能低下が生じないことになっているが,これは隣接したサブピクセルの「2x MSAA時のサンプル値」をキャッシュとして再利用することで実現できるためだ。
なお,ここであえてGeForce GTX 280と比較してみると,GeForce GTX 280は1サイクル当たり32ピクセル+32Z値の出力が可能だが,HD 4870では16ピクセル+32Z値の出力を行えることになる。
アンチエイリアシングの機能面では,HD 2900 XTやHD 3800シリーズから変更なし。MSAA以外に,独自のCFAA(Custom Filter Anti-Aliasing)も引き続きサポートされる。CFAAについての詳細は,やはり本連載のバックナンバー「ATI Radeon HD 2000シリーズのGPUアーキテクチャ徹底解説」を参考にしてもらえれば幸いだ。
前編で触れたように,HD 4800シリーズでは,ATI Radeon X18x0シリーズ以降で採用されたRing Busメモリアーキテクチャを捨てた。一方,競合のNVIDIAは,GeForce GTX 200シリーズでダイサイズのデカさという弱点を逆手にとって,512bitメモリインタフェースを採用してきた。この状況でAMDはどう戦うのか。
HD 4800シリーズでは,その物理スペース的な制約から256bitのクロスバー接続型メモリコントローラを採用している。各メモリコントローラは64bitインタフェースで32bit幅のグラフィックスメモリチップを二つ接続する仕様だ。64bitメモリコントローラは4基搭載されているから,全体としては64bit×4=256bitのグラフィックスメモリインタフェースとなる。
また前述したとおり,HD 4800のL2キャッシュは共有型でなく,各メモリコントローラ専属として実装されている。3Dグラフィックスコアとメモリコントローラ+L2キャッシュとの接続は,Hub(ハブ)を介したクロスバー接続となるので,3Dグラフィックスコアからは透過的に見える一方,レイテンシが懸念されることになるが,ここは新設計となる384GB/sの超高帯域幅でカバーするわけだ。
あらためて整理してみると,L1キャッシュとL2キャッシュのデザイン,そしてメモリコントローラとキャッシュシステムの接続形態は,GeForce 8800/9800/GTX 200シリーズとよく似ている。意地悪な見方をすれば「AMDはここ数世代の間,試行錯誤を重ね,ATI Radeon HDの内部バス設計をGeForce的にした」ともいえるだろう。
もっとも,キャッシュシステムがどれだけ改善されたところで,メモリシステム全体の最終的なボトルネックは,グラフィックスメモリそのものの帯域幅に帰着する。256bitのグラフィックスメモリインタフェースは,同じ世代のメモリチップを採用する限り,512bit幅のそれには絶対に勝てないのだ。
GDDR5はベースクロックの4倍の外部クロックで動作。自動de-skew機能を搭載している
自動de-skew機能により配線設計にも余裕が生まれるという
GDDR5は駆動電圧がGDDR3の1.8Vに対して1.5Vとなり,消費電力的にも優位とAMDはアピール
そこでAMDが選択したのが,ハイエンド市場をターゲットとするHD 4870に,GDDR5を組み合わせるという“飛び道具”だった。
GDDR5を一言で説明するなら「実クロックの4倍という外部クロックで動作できるグラフィックスメモリチップ」だ。HD 4870のリファレンスデザインでは900MHz動作品が組み合わされているので,3.6GHz相当のスループットが得られる計算になる。
もちろん,ピーク性能が得られるのはバースト転送時に限られるが,ある意味で,従来世代のグラフィックスメモリチップが1.8GHz相当で動作する512bitメモリインタフェースと同等の性能が得られるわけである。
大胆に言い換えるなら,「HD 4800シリーズは256bitメモリインタフェースのビハインドをGDDR5で補い,GeForce GTX 200シリーズのGDDR3 512bitメモリインタフェースに迫る」というイメージになるだろうか。
なおGDDR5では,超高速クロックの処理にまつわるクロックのタイミングのズレ「Skew」(スキュー)を補正するための自己学習機能を搭載しており,基板上の配線設計に余裕が生まれるという副次的なメリットもある。この自己学習型の歪み補正(de-Skew)の機能はRambusの「FlexPhase」テクノロジーと酷似しているが,いずれにせよ,超高速動作メモリにこうした技術が欠かせない状況になっていることは,記憶に留めておくといいだろう。
原稿執筆時点で,HD 4870用のGDDR5メモリチップは独Qimondaが供給している。そのため,GDDR5の詳細は同社のホワイトペーパーを見ると分かりやすいが,将来的には6GHz相当(実クロック1.5GHz)の製品が登場する見込みだ。
一見,従来製品からシェーダユニット(=SP)数を増やしただけに見えるHD 4800シリーズ。HD 3800をベースとしたマイナーチェンジ風な雰囲気も漂っていたが,実際のところは,フルモデルチェンジに近い,“ビッグマイナーチェンジ”のなされたGPUだ。
SP数800基という部分にどうしても目は行きがちであるものの,キャッシュシステムのリファイン,HD 4870におけるGDDR5の採用は,総合的なGPUパフォーマンスを向上させるのに大きく貢献している。
先に登場したGeForce GTX 200シリーズと,今回のHD 4800シリーズ。両者を見てきて感じるのは,NVIDIAとAMDがGPUに込めた「想い」の違いだ。
筆者の連載では何度か繰り返してきているが,GeForce 8800シリーズ以降,GeForce GTX 200シリーズに至るここ数世代のNVIDIA製GPUは,GPGPU製品であるTeslaが前提になっているため,命令粒度,演算粒度,スレッド粒度の細かい,「スカラプロセッサとしてのSPありき」の設計となっている。
一方,HD 2900 XT以降,HD 4800シリーズに至るここ数世代のAMD製GPUは,DirectX 10.1への対応,ハードウェアテッセレータ搭載など,とにかく3Dグラフィックス処理にフォーカスした,“GPU屋”として非常に潔い設計思想に基づいている。ベクトル演算効率最優先という,「SIMDありき」の設計を捨てる気はないようだ。業界動向的にGPGPUへの注目度が高くなってきたため,SIMDアーキテクチャのまま(やや後付け感も残しつつ)GPGPU対応を果たした感じに見える。
どちらが優れているとは言い切れないが,こういった前提知識はGPU選択に当たって,背中を押す「最後の一押し」になるかもしれない。
似ているようで似ていない2社のGPUだけに,最適化が進むことでどういったパフォーマンスを見せるのか,興味深いところだ。また,設計思想の違う2社のGPUが今後,どういう方向で進化していくのかにも興味が尽きない。
- 関連タイトル:
ATI Radeon HD 4800
- この記事のURL:
(C)2008 Advanced Micro Devices, Inc.