■後藤弘茂のWeekly海外ニュース■
AMDの新GPU「Radeon HD 6970 (Cayman:ケイマン)」を一言で表現すれば、R600以来のアーキテクチャを初めて改革し、既存のアプリケーションの性能を重視しつつ、DirectX 11と汎用コンピューティングの性能を引き上げたGPUだ。
アーキテクチャ上の最大のポイントは、まず、GPUをデュアルに完全分割することでジオメトリ性能を倍増させたこと。もう1つは、GPU内部のプロセッサを、5-wayのVLIW5(Very Long Instruction Word)アーキテクチャから4-wayのVLIW4へと切り替え、命令並列性を下げ、スレッド並列性を上げて、アプリケーションの実行効率を上げたこと。そのため、従来のAMD GPUと較べると、アーキテクチャ上は、相対的に効率が上がり、ジオメトリパフォーマンスが引き上げられる。
Caymanアーキテクチャについては、すでに何回か記事を書いたが、実際の製品発表でアップデートがあり、アーキテクチャの詳細と、GPU全体の構成が明らかになった。中でも重要なポイントは、Caymanのプロセッサ数と単精度浮動小数点演算パフォーマンスは、前世代のCypressとほぼ同等であることだ。
つまり、Caymanは、Cypressと同レベルの構成を取りつつ、アーキテクチャの改良でパフォーマンスの向上を狙った。Caymanのピークの浮動小数点演算パフォーマンスは、単精度では2.7TFLOPSで、Cypressと変わらない。Caymanでは、アーキテクチャの拡張によってダイサイズ(半導体本体の面積)は増えるので、ダイ面積当たりの数字の上でのパフォーマンスは下がることになる(AMDはこれまでこれを重視してきた)。つまり、AMDは、Caymanからスペック上での演算パフォーマンスを増やすことより、効率性を重視する方向へと転じた。これは大きな変化だ。
●コマンドストリーマから下を2個のコアに分割Cayman(Radeon HD 6970)の概要 ※PDF版はこちら |
概要とブロックダイヤグラム |
上の図はCaymanの全体構成だ。Cypressとの大きな違いは、ジオメトリエンジン群が2つに分かれ、GPUの内部が完全に2つに分割されたこと。2つの“コア"は、コマンドエンジンから供給されるコマンドストリームのレベルから分割され、それぞれ別な画面領域のジオメトリとピクセルを処理する。下の図は、Cypressの実行ユニットを削減したRadeon HD 6800 (Barts)の図だ。上のCaymanと比較すると違いが明瞭にわかる。
Barts(Radeon HD 6800)の概要 ※PDF版はこちら |
CypressやBartsでは、ジオメトリエンジン群とテッセレータはGPU全体で1個で、パイプライン上ではラスタライザから下が2系統に分割されていた。図中では、Bartsの上側のグラフィックスエンジン群の中で、頂点を扱うVertex Assemblerなどや、プリミティブを扱うGeometry Assemblerなどは1ユニットずつとなっている。
それに対して、Caymanではジオメトリエンジン群とテッセレータも二重化されて、完全に2分割された。CypressやBartsと同様に、SIMD(Single Instruction, Multiple Data)アレイは2分されているため、Caymanでは完全にGPUが2つに分かれている。AMDアーキテクチャの場合は、レンダバックエンド(ROP)も分割されているため、3Dグラフィックスパイプラインのほぼ全てを通して2分された。
ジオメトリユニット群が2倍になった結果として、ピークのジオメトリの固定機能スループットは2倍になった。従来のCypressまでが、1サイクルに1プリミティブだったのが、2プリミティブに上がった。テッセレーションも2倍のレートに上がった。AMDの資料では、ほとんどのテッセレーション率で、テッセレーションパフォーマンスが2倍かそれ以上となっているので、Caymanでは従来と同等の機能を持つテッセレータを2倍備えたと推測される。
GPU構造の進化 ※PDF版はこちら |
ジオメトリエンジン群とテッセレータが二重化 |
CypressとCaymanのテッセレーションの性能比較 |
●Cypressより20%高いスレッドの並列性
演算プロセッサコアであるSIMDアレイは、それぞれ12個のSIMDエンジンを備える2つのアレイに分かれている。Cayman全体ではSIMDエンジンは24個、これは、CypressのSIMDエンジン数の20個より20%多い。テクスチャユニットはSIMDエンジンに付属するため、こちらも20%多い96個になっている。
CaymanとCypressのどちらも、各SIMDエンジンに16個のVLIWスレッドプロセッサを搭載する。そのため、CaymanのVLIWスレッドプロセッサ数は384個で、Cypressの320個より20%多い。つまり、CaymanはCypressより、20%多くのスレッドを同時に走らせることが可能だ。
個々のSIMDエンジンに搭載される16個のVLIWスレッドプロセッサは、複数サイクルで1つの「ウエイブフロント(Wavefront)」を実行する。ウエイブフロントは、AMD GPUの論理ベクタ長であり、NVIDIAアーキテクチャの「ワープ(Warp)」に当たる。AMD GPUのWavefrontは過去数世代64エレメントであり、Caymanも64であると推測される。
64エレメントのWavefrontは、AMD GPUの分岐粒度でもある。Wavefrontは、SIMD実行されるため、分岐命令によって64エレメントの処理がそれぞれ異なる方向へ分岐する場合、両パスを実行する必要がある。エレメント毎に実行を行なわないようにマスクするプレディケーションによってベクタ分岐を行ない、コントロールフローを制御する。64という粒度はNVIDIAの32より大きいため、その分、コントロールフローの制御では不利になる。AMDの資料ではフローコントロールが向上したとなっているが、その内容は明らかにされていない。64のWavefrontは、グラフィックスに最適(4×4が4個)であるため、AMDがそれを変更する可能性は低い。
世代毎の詳細の比較 ※PDF版はこちら |
GPUコンピューティング周りの拡張 |
●命令並列度を下げたCaymanのVLIW4プロセッサ
CaymanのVLIW4スレッドプロセッサは、Caymanの中で最も大きな変化だ。AMDはR600以来、VLIW5と呼ぶ、5-wayの演算ユニットを備えたVLIWプロセッサ構成を取っていた。4個の単純な単精度浮動小数点積和算ユニットと、1個のスーパーファンクションユニット(SFU)の組み合わせだ。実際には分岐ユニットも備えるため、VLIW命令の命令スロットは6個。スーパーファンクションユニットが積和算も実行できるため、ピークで5個の単精度浮動小数点積和算を実行可能だった。しかし、5並列の命令並列性を得られる率が低いため、結果としてスレッドプロセッサの演算ユニットの稼働率は低かった。
Caymanでは4個の積和算ユニットだけの構成に再編し、ピークで4個の単精度浮動小数点積和算へと並列度を下げた。その結果、論理上は、命令レベルの並列化が容易になった分だけ、プロセッサの稼働率が上がることになる。
CaymanのSIMDエンジンとVLIW4プロセッサの構成 ※PDF版はこちら |
VLIW5からVLIW4への進化 ※PDF版はこちら |
スーパーファンクションユニットが実行していた三角関数などは、積和算ユニットに機能を実装することで実行する。VLIWの3個の命令発行スロットを使って1個の超越関数系の命令を発行する仕組みとなっている。つまり、3個の積和演算ユニットを連携させて1個の超越関数を実行している。積和算とスーパーファンクションユニットで、演算ロジックの共有化を行なうことによって、VLIWスレッドプロセッサのダイ面積当たりの性能は10%向上したという。
AMDはVLIW4アーキテクチャでの、各命令のスループットも明らかにした。32-bit単精度浮動小数点演算は、積和算も含めて4命令/サイクルのスループット。これは、GPUでは当たり前だ。64-bit倍精度浮動小数点演算については、積和算と乗算が1命令/サイクル、加算は2命令/サイクルのスループットとなっている。
倍精度浮動小数点積和算は、従来のCypressのVLIW5では単精度演算の1/5のパフォーマンスだった。VLIW5プロセッサ全体で1命令/サイクルのスループットだったからだ。CaymanではVLIW4になったことで単精度の1/4のパフォーマンスに上がり、チップ全体では676 GFLOPSと、Cypressの544 GFLOPSより25%上昇した。
VLIW4の概要 |
●整数演算性能は依然として制約されている
整数演算では、24-bitでは4命令/サイクルだが、32-bitでは加算のみが4命令/サイクルのスループットで、それ以外はスループットが落ちる。AMDが、依然として浮動小数点重視で、整数パフォーマンスに注力していないことがわかる。
VLIW5からVLIW4へと変更されたため、SIMDエンジン全体での演算ユニット数は、Cypressの80ユニット(5ユニット×16スレッドプロセッサ)から、64ユニット(4ユニット×16スレッドプロセッサ)へと20%減った。SIMDエンジン全体でのピークの演算パフォーマンスは20%低くなり、ダイエリアもある程度減少したと推測される。
つまり、GPU全体ではSIMDエンジンが20%増えて同時に走らせることができるスレッド数が20%増えて、その代わりに、1個のSIMDエンジンの演算パフォーマンスが20%減ったことになる。GPU全体での積和算ユニット数は、Cypressが1,600個だったのに対して、Caymanは1,536個。4%ほど減ったが、ほぼ同等のユニット数と見ていい。言い換えれば、Cypress→Caymanでは、ほぼ同じ数の積和算ユニットを使いながら、命令レベルの並列性を20%下げて、スレッドレベルの並列性を20%上げたことになる。
命令からスレッドへと並列性を移行させたのは、その方がパフォーマンスを引き出しやすいからだ。ただし、GPUハードウェアが管理しなければならないインフライトのスレッド数が増えるため、ハードウェアの複雑性は増す。その代わり、命令レベルの並列性が減る分だけドライバソフトウェアに内蔵されているリアルタイムコンパイラの負担が減る。
●メモリ帯域の制約がきついAMDアーキテクチャこのほか、Caymanでは複数のコンピュートカーネルを同時に走らせることが可能であることが明らかになった。個々のカーネルプログラムは、それぞれコマンドキューが割り当てられ、保護されたバーチャルメモリアドレスドメインが割り当てられるという。
NVIDIAも、Fermiアーキテクチャからはマルチカーネルランニング機能を備え、1個のSM(Streaming Multiprocessor)毎に個別のカーネルを並列に走らせることができる。ただし、コンテクストを共有するカーネルで、相互に依存性がないものに限られる。一貫性を保つために、Caymanも同様の制約を持つと推定される。
メモリはフルスペックのRadeon HD 6970で、GDDR5 5.5Gtpsの転送レート。メモリインターフェイスは256-bit幅なので、メモリ帯域はピーク176GB/secとなる。AMDの方がNVIDIAより高速なメモリを使うのは、ダイが小さい分だけメモリインターフェイスの幅が狭いからだ。GeForce GTX 580(GF110)は384-bitのメモリ幅を持つため、4Gtpsの転送レートで192GB/secのメモリ帯域を備える。
AMD GPUでは、NVIDIA GPUより制御系の構造が単純であるため、ピークの演算パフォーマンスは高い。しかし、そのために、ピークメモリ帯域に対するピーク演算パフォーマンスの比率は、かなり低い。Caymanでもそれは同様で、単精度演算でのBytes/FLOPS比率は0.065という極端な低率になっている。NVIDIA GPUも低いが、CaymanはGF110と較べても半分程度だ。
ただし、倍精度演算のパフォーマンスはNVIDIAアーキテクチャの方が高い(単精度に対する比率はピークで1/2)ため、倍精度演算でのBytes/FLOPS比率は0.260と、ほぼNVIDIA Tesla系と同等だ。外部メモリに関する限り、倍精度演算ではメモリバインドの度合いが同程度ということになる。
しかし、AMD GPUはNVIDIA Fermiのような書き込み可能なキャッシュ階層を持たないため、キャッシュでメモリ帯域の狭さをカバーしにくい。Caymanでは、内部バスアーキテクチャは従来を踏襲しており、上りと下りに分離されたパスを持っている。それに対して、NVIDIAは双方向バスを備えているため、CPUのような書き込み可能なキャッシュを備えることができる。
こうしたアーキテクチャの差があるため、全体で見るとCaymanの汎用コンピューティングへの最適度は、NVIDIA Fermiには及ばない。AMDの次のアーキテクチャ拡張は、確実に内部バスとメモリ階層のアーキテクチャになるだろう。
Caymanのメモリアーキテクチャ ※PDF版はこちら |
AMD GPUのダイサイズ戦略 ※PDF版はこちら |