後藤弘茂のWeekly海外ニュース

AMDの新フラッグシップGPU「Radeon R9 290/290X」

トップエンドの性能の新GPU

 AMDの次期フラッグシップGPU「Radeon R9 290/290X(Hawaii)」が姿を現した。フルスペックのR290Xのストリームプロセッサ(FMADユニット)数は2,816で、44のCU(Compute Unit)にまとめられている。動作クロックは最大1GHzで、生演算性能は5.6TFLOPS。ジオメトリエンジンは4ユニットでジオメトリ処理は4GPrimitives/sec、ROPは64ユニットでピクセルフィルレートは64Gpixels/sec。メモリインターフェイスは512-bit幅で5GbpsのGDDR5で320GB/secのメモリ帯域を実現する。現時点では、最高性能の単体チップGPUだ。

Radeon R9 290シリーズ(Hawaii)の概要※PDF版はこちら

 GPU演算コアはGCN(Graphics Core Next)アーキテクチャの拡張版。基本構成は同じだが、性能と機能が拡張されている。GPUアーキテクチャ上の最大の特徴は、ジオメトリエンジンを4ユニットにしたことで必然的にシェーダプロセッサが4コアに分割されたこと。NVIDIAはすでにジオメトリエンジンを増やしてGPUコアのクラスタの粒度を小さくしている(マイクロポリゴン化にフォーカスしたため)が、AMDも同様の方向へと向かい始めた。メモリアクセスには、GPUの各メモリをフラットアドレスでアクセスできるモードが加わった(従来の個別のアドレスアクセスモードと併存)。

 グラフィックスプロセッサとして特に目立つのは、ジオメトリパイプの倍増によるジオメトリ性能の強化と64ユニットものROPによるピクセルプロセッシング。前世代のRadeon HD 7900(Tahiti)系と比べると、ジオメトリとピクセルのプロセッシング性能が2倍近く上がっている。シェーダの演算ユニット個数は1.375倍なので、相対的にシェーディング性能より、グラフィックス固定機能性能の引き上げに注力したGPUだと言える。

 その一方で、汎用コンピューティングのための機能強化も目立つ。最大のポイントは、演算タスクのフェッチと展開を行なう「Asynchronous Compute Engine(ACE)」が、従来の2ユニットから8ユニットに増やされた点。これにより、従来より多くの演算タスクのディスパッチが可能になり、粒度の小さな演算タスクを多数平行で走らせるといった使い方が容易になった。

 そのほか、今世代ではAMDはオーディオDSPとしてTensilicaのDSPを使った「TrueAudio」を実装。PCI Express経由でDMA転送を行なうCrossFire XDMAも実装した。

4ユニットに分かれたクアッドコア的なHawaiiの内部構造

 AMDのRadeon R9 290のアーキテクチャスライドでは、GPUが大きく4ユニットに分かれているように見える。ジオメトリパイプと演算クラスタであるCU、レンダーバックエンドが4分割され、シェーダエンジンと呼ばれるユニットにまとめられている。実際には、この構造は従来のAMD GPUにも存在しており、例えば、Radeon HD 7900は2つのシェーダエンジンの構成になっている。今世代から、名前をつけたというだけだ。

 実際にAMD GPUは、シェーダエンジン単位で独立した構造になっている。これは、ジオメトリパイプが4ユニットに分割されているからだ。ジオメトリエンジンは頂点やジオメトリのアセンブルやテッセレーションを行ない、バーテックスシェーダやジオメトリシェーダを演算クラスタであるCUにディスパッチする。さらにAMDアーキテクチャではジオメトリパイプと同数のラスタライザがあり、頂点出力をラスタライズしてピクセルを生成し、ピクセルシェーダをCU群にディスパッチする。

 グラフィックスタスクの多くは並列化が容易だ。ところが、ジオメトリプロセッシングとラスタライズは基本的にシリアルタスクで、そのためにボトルネックとなりやすい。1ジオメトリエンジンは、基本的に1 Primitive/Cycleのスループットなので、1ユニットしかなければ動作周波数の分だけのプリミティブしか生成できない。

 ジオメトリパイプを並列化するためには、一般的に描画エリア自体を分割するため、その下のパイプも分割することになる。AMDのスライドの図でシェーダエンジンとしてまとめられているユニットの内部で、頂点フェッチから始まる一連のグラフィックスプロセッシングが行なわれる。言ってみればミニGPU的な単位で、GPUのマルチコア化的な構造だと言ってもいい。

Radeon R9 290シリーズのエンジン※PDF版はこちら

 実際には、この動きはもっと以前、Radeon HD 6970(Cayman)の頃から始まっている。AMDはRadeon HD 5870(Cypress)で、テッセレーションによる頂点の爆発的増加に対応するために、ラスタライザを2ユニットの構成にした。次のCaymanで完全に分割したデュアルコア的な構造を取り、それを今回のHawaiiでクアッドコア的な構造に拡張した。NVIDIAも同様のマルチコア的な構成へとGPUを進化させており、一般的な構成になりつつある。AMDも今回、分割したクラスタにシェーダエンジンという名称を与えることで、アーキテクチャを明確化した。

GPU構造の進化※PDF版はこちら

 Radeon R9 290(Hawaii)では、この構成の結果、4Primitive/Cycleのジオメトリスループットとなった。前世代のRadeon HD 7900(Tahiti)の2倍で、Radeon HD 5870(Cypress)の4倍だ。テッセレータとラスタライザも同数を備えている。結果として、4GPrimitives/secと、AMD GPUとしては最高のジオメトリスループットを達成した。つまり、よりジオメトリリッチなグラフィックス(マイクロポリゴンなど)に強くなった。

レンダーバックエンドの数を大幅に強化

 290Xでは、シェーダエンジンに、それぞれCUが11ユニットずつ配置されている。実際にはCUは最大4ユニットで1バンドルになっており、L1命令キャッシュなどを共有する構成になっている。この構成は、初代のGCN(Graphics Core Next)アーキテクチャから変わっていない。

 また、AMDのシェーダエンジンのスライドでは、AMDがレンダーバックエンドと呼ぶROPユニットも、4ユニットが含まれている。しかし、実際にはレンダーバックエンドは演算ユニット群の側ではなく、メモリコントローラ側に接続されている。CUとはクロスバースイッチを介して接続されており、原理的にはCUはクロスバーを介してどのメモリコントローラのクラスタにもアクセスができる。

 しかし、今回のHawaiiの構成は、シェーダエンジンの演算コアが4分割されており、メモリコントローラも4の整数倍である8コントローラ、メモリコントローラに付属するレンダーバックエンドクラスタも16と4の倍数で、きれいに4の倍数となっている。そのため、1つのシェーダエンジンからの出力は、4つのレンダーバックエンドクラスタに流し、4つのレンダーバックエンドクラスタが2つのメモリコントローラでピクセル打ち込みを行なうという、綺麗なフローが可能だ。ジオメトリエンジンからメモリコントローラまでがすっきり整数倍になっている。

 ちなみに、前世代のTahitiは、メモリコントローラに対するレンダーバックエンドの配置がイレギュラーで、6個のメモリコントローラに8個のレンダーバックエンドクラスタとなっていた。AMDは、Tahitiではこの部分が非常に複雑でダイエリア効率も悪かったとしている。

Radeon R9 290シリーズのバックエンド※PDF版はこちら
Radeon HD 7900の概要※PDF版はこちら

 Hawaiiは、レンダーバックエンドが16クラスタで64ユニットと、数が極めて多い。現状のGPU中最強だ。また、数が多いだけでなく、上記のように、メモリコントローラに対して1対2できれいに接続されている。無駄なクロスバー接続がなく、その点でも効率的だ。結果として、64Pixel Output/Cycleのピクセル打ち込みが可能で、ピクセルフィルレートはなんと64Gpixels/secに達している。現状ではGPU中で最高で、描画解像度が高くても対応が容易であることを示している。AMDの多画面サポートの強化の方向と一致している。

CUアーキテクチャは前世代をほぼ継承

 GCNのプロセッサクラスタであるCU自体は、従来の構成と大きくは変わっていない。GCNでは、それぞれのCUに、演算ユニット、ロード/ストア&テクスチャユニット、キャッシュ&ローカルスクラッチパッドメモリ、命令ユニットを備える。CUは最大4個束ねられてクラスタを構成しており、クラスタ内のCUはL1命令キャッシュとL1スカラデータキャッシュを共有する。

GCNのCUのアーキテクチャ※PDF版はこちら

 ベクター演算ユニットははSIMD(Single Instruction, Multiple Data)プロセッサで、32-bitの浮動小数点積和演算が16ユニット含まれる。4つのベクターにはSIMD 0からSIMD 3までの名前が振られている。各ベクタープロセッサが、それぞれ64KBのベクターレジスタを備えている。CPUと比べてレジスタが相対的に大きいのは、GPUではレジスタを大きく取ってマルチスレッディングを行なうことで、メモリアクセスレイテンシを隠蔽するからだ。

 4つのベクターユニットは、それぞれ独立して別なスレッドを実行する。実際にはAMD GPUでは、「Wave」と呼ぶ64スレッドのバッチ単位で処理を行なう。64スレッド分の命令が、1命令づつWavefront(ウエーブフロント)として実行ユニットに送られる。CU内の物理的ユニットのベクター長は16レーンだが、論理的なベクター長は64レーン分となり4サイクルで1つのWavefrontを実行する。ちなみに、倍精度演算の場合は積和算などは16サイクルとなり、単精度と比べてスループットは4分の1に落ちる。

ベクターユニットの構造※PDF版はこちら

 このほかにロード/ストアとテクスチャユニットがあり、さらに1個のスカラユニットがある。メモリは、CU全体で、16KBのL1データキャッシュと64KBの「ローカルデータシェアメモリ」と呼ばれるスクラッチパッドメモリを共有する。また、GPU全体でデータをシェアできる「グローバルデータシェア」がある。

フラットメモリアドレッシングモードを追加

 これまでのGCNは、ロード/ストアでは、このローカルデータシェアとグローバルデータシェア、さらにDRAMでそれぞれ異なるロード/ストア命令でアクセスを行なっていた。しかし、新アーキテクチャでは、新たにフラットアドレスのロード/ストア命令が加わり、フラットな仮想メモリアドレスでアクセスができるようになった。

 GCNはもともとCPU的な仮想メモリシステムをサポートしており、仮想メモリをハードウェアで管理するためのTranslation Lookaside Buffer (TLB)も搭載している。物理メモリアドレスベースの古いGPUアーキテクチャからは脱しているため、こうしたアクセスが可能になったと見られる。ローカルデータシェアやグローバルデータシェアの構成は、GCN以前のVLIW(Very Long Instruction Word)型のGPUアーキテクチャ時代から引き継いでいる。GCNのメモリ階層は下の図の右側のようになっている。

AMD GPUのメモリヒエラルキー※PDF版はこちら

 また、仮想メモリアドレッシングは、DirectX 11.2のタイルリソースの管理にも使われている。仮想アドレスの物理アドレスへのマップを変えることでテクスチャタイルを切り替えることができる。これは、オフチップのビデオメモリのアドレッシングベースだが、大容量のL2キャッシュにキャッシュされることを前提としている。

 L2キャッシュメモリは、メモリコントローラ側に接続されている。CUとメモリコントローラ& L2の間にはクロスバースイッチのファブリックがあり、ここのメモリ帯域は1TB/secとなっている。L2は通常はメモリコントローラの数のパーティションだが、今回は1メモリコントローラにつき2個の64KB L2キャッシュと説明されている。実際には、以前からDRAMコントローラに対して1パーティションの構成だったのかもしれない。GPU全体でL2キャッシュの量は1MBだ。

 メモリインターフェイスは512-bit幅で、GPUでは最大級。これ以上インターフェイスを増やすことは、ボードレイアウト的にもコスト的にも難しい。GDDR5の転送レートも5Gbpsはコストと熱的に限界に近く、320GB/secというメモリ帯域は現状では最大のメモリ帯域だ。GDDR5を7.2Gbpsまで引き上げれば461GB/secまでの帯域が可能だが、そのあたりが限界となりそうだ。

 Radeon R9 290のスペックで特徴的なことはメモリ帯域の伸び悩みで、前世代と比べて演算は31%、ピクセルアウトプットは90%も増えているのにメモリ帯域は21%しか増えていない。メモリ帯域が追いついていないことが明白になっている。原因はGDDR5が限界に近づいていることだ。HBM(High Bandwidth Memory)が有望な代替だが、HBMもワンチップではピークの帯域は得られないため、現実解として導入時点でどこまでのメモリ帯域が可能になるかわからない。

高性能メモリのバンド幅ロードマップ※PDF版はこちら

大きく強化されたコンピューティング機能

 AMD Radeon R9 290では、演算のフロントエンドプロセッサであるACE(Asynchronous Compute Engine)が大幅に強化された。ACEはグラフィックスコマンドプロセッサと並列に動く、演算のためのタスクフェッチ&スケジュール&ワークアイテムディスパッチユニットだ。実際にはマイクロコントローラだ。一見、CPUのフェッチ&命令ユニットとポジションが似ているように見えるが実際には大きく異なる。

 GPUでは命令フェッチは各CUが行ない、CUで実行するWaveのローンチは各シェーダエンジンで行なう。ACEは、それ以前の段階のタスクのフェッチとスケジューリング、リソースの割り当てを行なう。タスクの中には並列に実行できるものと、そうでない組み合わせがあるが、そのハンドルも行なう。また、タスクのアウトオブオーダに実行されたタスク群のトラックも行なう。各ACEが各サイクルに1個のワークグループの生成が可能で、そのワークグループからWavefrontがシェーダエンジンの中でCUにディスパッチされる。

 以前のTahitiはこのACEユニットが2ユニットだったが、Hawaiiでは8ユニットに増えた。また、各ACEユニットがそれぞれ8個のタスクキューをハンドルできる。GPU合計では64のキューのハンドルが可能だ。そのため、ACEが多いとより小さな粒度の演算タスクを効率的に演算コアに発行できるようになる。8ユニットというHawaiiのACEの数は、演算を重視するPlayStation 4(PS4)のGPUコアのACEの数と同じだ。

Radeon R9 290のフロントエンド※PDF版はこちら

当面は28nmプロセスを継続するAMD

 Radeon R9 290は、AMD/ATI Technologiesの歴史を通じて最大サイズのGPUだ。チップのダイサイズは438平方mmで、AMD/ATI系GPUで過去最大だったRadeon HD 2900(R600)の420平方mmを少しだけ上回る。AMDはATIを買収した直後に、GPUダイを小型化する戦略転換を行なったが、今世代ですっかりATI時代の大型ダイ路線に戻った。AMD GPUは過去4年間はダイサイズではNVIDIAの最大サイズGPUよりかなり小さいのが一般的だったが、今回は560平方mm台のGK110にかなり近づいた。

GPUダイサイズとプロセス技術の推移※PDF版はこちら
AMD GPUダイサイズの推移※PDF版はこちら

 今世代でダイサイズが大型化した理由は、製造プロセス技術が28nm世代のまま変わっていないからだ。本来なら、GPUは2013年末から2014年前半にかけて、次の20nmプロセスへと移行を始めるタイミングだが、AMDは28nmプロセスを選択した。AMDは2011年末に発表したRadeon HD 7900から28nmプロセスを使い始めたが、同じ世代のプロセスをまだ継続して使っている。

プロセス技術とGPUサイクル※PDF版はこちら

 そのため、40nmプロセスを継続してRadeon HD 5870からRadeon HD 6970へと移行した時と同様に、AMDはチップのダイサイズを大型化してトランジスタ数を増やして、性能とアーキテクチャを拡張した。ダイを24%ほど増やした結果、AMD Radeon R9 290が産まれた。

 AMDの今回の選択は、20nm以降のプロセスに固有の問題を浮き彫りにしている。従来は、プロセス移行が遅れる原因は、製造ファウンダリのプロセス技術の立ち上がりの遅れだった。しかし、今回は、それ以前のレベルで、20nmプロセスで製造することに意味があるのかどうかに疑問符が付いている。

トランジスタコストダウンのセオリが崩れる20nm以降

 従来のCMOSスケーリングのセオリーは単純だった。プロセスノードの世代が進むと、ダイ当たりに搭載できるトランジスタ数が1世代なら2倍、半世代なら1.4倍に増える。それに対してウェハとウェハプロセッシングのコストはそれほど増えないため、微細化が進むと相対的にトランジスタ当たりのコストが下がる。そのため、プロセスを微細化することで、GPUは機能や性能を増やしながら、コストを抑えることができる。

 ところが、20nm以降はプロセス開発やウェハプロセッシングのコストが上がるため、従来のセオリーが通じなくなる。トランジスタ当たりのコストがあまり下がらないか、同じになる。すると、無理に20nmに移行して同じダイサイズのままトランジスタ数を増やすより、28nmのままでダイを大型化して製造した方が経済的に有利になりかねない。少なくとも、歩留まりが低いリスク生産期に無理をして20nmのダイをスタートさせる意味は薄い。こうした事情があるため、今回は半導体ベンダーの間で、プロセス移行は足並みが揃わない状況になりつつある。

 さらに話を複雑にしているのは、TSMCやCommon Platformなどのファウンダリや半導体開発グループが、20nmプロセスのバックエンドを流用して、フロントエンドのトランジスタだけをFinFET 3Dトランジスタに切り替えようとしていることだ。そのため、ファウンダリ側でも20nmプロセスの位置づけが揺れており、ファウンダリを利用するファブレス半導体ベンダ側も、プレーナトランジスタの20nmを使うか、FinFETの14/16nmへとスキップするか、揺れる状態が2013年前半まで続いていた。

 結果として、現在は28nmプロセスが相対的に長い間使われ、その後、20nm、そして14/16nmへと早いペースで切り替わって行くという流れになりつつある。そのため、AMDについては、GPUの進化が過去2世代の2年置きのペースではなく、より速いピッチで進むことになる。もちろん状況は各社異なり、例えば、フラッグシップGPUのダイサイズを、これ以上大きくすることは難しいレベルにまで大型化しているNVIDIAは、AMDとは立場が違ってくる。

Intel&ファウンダリプロセスロードマップ※PDF版はこちら

 こうした背景で28nmプロセスを継続するため、今回のAMDのGPUラインナップ「Volcanic Islands」では、新旧のダイが入り交じる。部分的に、28nmの最初の世代だったSouthern Islandsファミリのダイが残る。例えば、Radeon HD 7900のダイはリビジョンが変わるものの、基本的には同じ設計でRadeon R9 280/280Xとして継続される。新ダイも混ざるため、非常に分かりにくいラインナップとなっている。

AMD GPUのダイとユニット※PDF版はこちら

(後藤 弘茂 (Hiroshige Goto)E-mail