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

AMDが革新的な次世代GPUアーキテクチャの概要を発表



●AMDが技術カンファレンスで新GPUのベールを剥ぐ
AMDのEric Demers氏(Chief Technology Officer & CVP, AMD Graphics, AMD)

 AMDは今年(2011年)末の出荷を目標に開発している次世代GPUコアアーキテクチャの概要「Graphics Core Next」を発表した。AMDは、デベロッパのための技術カンファレンス「AMD Fusion Developer Summit(AFDS)」を米ワシントン州ベルビューで6月13〜16日に開催。そこで、次世代GPUコアのアーキテクチャを公開した。この次世代コアは、今後のAMDのGPUプログラミングフレームワークであるFSA(Fusion System Architecture)に対応したアーキテクチャだ。汎用コンピューティングに向けた柔軟なプログラム性では、NVIDIAのFermiアーキテクチャをも凌ぐ部分が多い、革新的な新アーキテクチャとなっている。

 AFDS最終日のキーノートスピーチに登場したAMDのEric Demers氏(Chief Technology Officer & CVP, AMD Graphics, AMD)は、まずAMDのこれまでのGPUアーキテクチャを振り返り、GPUが世代とともにプログラム性を増してきたことを強調。その上で、FSAを実現するために、さらにアーキテクチャの改革が必要だと語った。つまり、AMDにとってFSAと「Graphics Core Next」は、対となるアーキテクチャだ。


AMD/ATI TechnologiesのGPUアーキテクチャを振り返ったスライド

●AMDのGraphics Core NextはFSAのためのアーキテクチャ
FSAの機能

 Graphics Core Nextの新アーキテクチャでは、FSAのサポートに必要となる、あるいは、FSA世代で望まれるさまざまな新機能を備える。例えば、細粒度のコンテクストスイッチングや、GPU内部の複数のコアで異なるカーネルプログラムを走らせる機能を備える。また、x86 CPUのバーチャルメモリアドレス空間をメモリコントローラがサポートする。それによって、望まれているC++のサポートを実現する。これは、Microsoftの発表したC++のデータ並列向け拡張「C++ AMP(Accelerated Massive Parallelism)」と呼応する。

 さらに、汎用コンピューティングでは効率が悪かった従来のVLIWアーキテクチャのプロセッサコアを抜本から改革、シングルレーンを束ねたSIMD(Single Instruction, Multiple Data)型プロセッサを搭載する。コアのマイクロアーキテクチャだけを見れば、AMD GPUとしてはATI Technologies時代の2007年の「Radeon HD 2000(R6xx)ファミリ」以来の大アーキテクチャ改革となる。シングルレーンを束ねたSIMDという点では、NVIDIAやIntelのLarrabee、PowerVRなどと似通う。


FSAのロードマップ 「Grahpic Core Next」アーキテクチャの概要

●ベクタとスカラの両ユニットを備えたCompute Unit(CU)

 次世代のAMD GPUは「Compute Unit(CU)」と呼ばれるプロセッシングコアを最小単位として構成される。従来のAMD GPUは、演算コアに対する命令発行やコントロールを全てGPUの中核となる部分で行なっていた。しかし、新アーキテクチャでは、そうした集中制御方式をやめ、命令発行やスケジューリングの機能は個々のCUへと分割して持たせることにした。下がCUの構造を示すスライドだ。

Compute Unitの概要 Compute Unitのアーキテクチャ

 CUにはSIMD型のベクタ演算ユニットが4個とスカラ演算ユニットが1個備えられている。通常のGPUはベクタ演算ユニットしか持たないが、AMDの新アーキテクチャではスカラ演算のユニットを備える点が大きな特徴となっている。ベクタコンピューティングの先駆けとなったCray Researchのベクタスーパーコンピュータも同様にベクタとスカラの両方を備えていた。Demers氏もスピーチの中でCrayのアーキテクチャを引き合いに出した。

 新アーキテクチャのスカラユニットは、分岐だけでなくフル機能の整数演算ユニットとなっている。スカラユニットは、専用の8KBのレジスタを備え、命令は専用のスカラユニット用のL1命令キャッシュからフィードされる。

 CUのSIMD演算ユニットは、それぞれが16レーンの演算ユニットを備える。浮動小数点(FP)の積和算と整数演算の両方を実行できる演算ユニットだ。また、それぞれが64KBのベクタレジスタを備えている。Crayスパコンのように、スカラ演算での性能も狙ったものではなく、コントロールフローなどの効率化を狙ったユニットだ。

フル機能の整数演算ユニット ベクタALUユニット すから+ベクタユニット構造

 SIMD演算ユニットは16レーン構成で同一命令で16演算を、並列実行できる。単精度演算なら、基本は1サイクルスループットだ。旧来のAMD GPUやNVIDIA GPUは、超越関数などを実行するスーパーファンクションユニットを備えていたが、AMDの新アーキテクチャでは超越関数も倍精度演算も同じSIMDの演算ユニットで実行する。ただし、それらの演算を行なう場合はスループットが落ちる。

 ベクタレジスタは32-bit単精度で64ワード分、2,048bit幅と長大なレジスタとなっている。なぜ演算ユニットが16レーンなのにレジスタのスロットは64ワードなのか。それは、16レーンのSIMDユニットが4サイクルかけて64ワークアイテム(またはスレッド/ストランド)を実行するためだ。

 AMD GPUでは、64ワークアイテムを1単位とした実行スタイルを取っている。これを「Wavefront」と呼んでおり、実行ユニットはWavefront単位で同一命令のSIMD実行を行う。つまり、Wavefrontの64ワークアイテムが、AMD GPUの論理ベクタ長となっている。これは、NVIDIAアーキテクチャで32ワークアイテムを束ねたWarpに相当する。

●中央制御の命令ユニットを各CUに分散

 下の図はAMDの新アーキテクチャを、よりプロセッサらしいダイアグラム図に書き換えたチャートだ。青いチューブが16本並んだユニットがSIMDユニットで、これが4ユニット連なっている。左がスカラユニットだ。CUの中の命令発行ユニットからそれぞれのユニットへと命令がディスパッチされる。以前のAMDアーキテクチャでは、命令ユニットはSIMDエンジンの外にあり、中央制御されていた。

Compute Unitのアーキテクチャ
PDF版はこちら

 これをNVIDIAのFermi系のGF114アーキテクチャと比較すると次のようになる。NVIDIAのこの世代ではSM(Streaming Multiprocessor)の中に16レーンのSIMDユニットが3個、その他にスーパーファンクションユニットが8レーン備えられている。NVIDIAのSMは、AMD新アーキテクチャのCUにほぼ相当する。1ユニットの規模としては、AMDのCUの方が規模が大きい。

GF104のStreaming Multiprocessor
PDF版はこちら

 AMDのCUでは図中では描いていないがロード/ストアユニットがベクタメモリデコードの下にある。またテクスチャユニットもCUに1個ずつあり、テクスチャと演算の比率は従来通り1対4に保たれているという。その他に、分岐やメッセージパッシングのユニットがある。

ベクタメモリデコードの構造 分岐/メッセージパッシングユニット

●16レーンのSIMDが4サイクルで64アイテムのWavefrontを実行
命令発行ポート

 命令発行ポートは合計で7ポートだと推測される。同時に発行できる命令は最大5命令となっている。面白いのは、4個のSIMDユニットへの命令発行が1サイクルに1命令しかできないことだ。一見、4 SIMDユニットに命令をフィードし切れないように見える。

 これは次の図のような仕組みになっている。各SIMDは16レーンで4サイクルかけて1つのWavefrontを実行する。AMDの新アーキテクチャでは、CUの中の4個のSIMDの命令発行を1サイクルずつスライドさせている。あるサイクルにSIMD 0に命令を発行し、次のサイクルにはSIMD 1に命令を発行といった具合に命令発行をずらす。4サイクルかけて、4個のSIMDユニットに命令を発行する仕組みだ。そのため、1命令ポートで、4つのSIMD全てをフル稼働させることができる。


次世代GPUコアのスケジューリング
PDF版はこちら

 ちなみに、Wavefrontを4サイクルかけて実行するのは、実行ユニットの実行遅延を隠蔽する目的がある。逆を言えば、4サイクル以上の実行レイテンシは隠蔽できず、ストールするかWavefrontを切り替えることになる。そのため、この実行サイクル数は、AMD GPUのコアの動作周波数と密接に結びついている。

 AMDは従来から4サイクルのWavefront実行を行なっている。新アーキテクチャでも4サイクルを選んだということは、AMDがGPUの動作クロックを劇的に上げるつもりがないことを示唆している。ちなみに、NVIDIAの場合はWarpの動的スケジューリングによって、実行レイテンシとメモリレイテンシの両方を隠蔽している。そのため、原理的に動作周波数を上げやすい。

●VLIWからシングルレーンを束ねたSIMDへの転換

 AMD GPUはこれまでVLIW型の実行プロセッサを備えていた。最小単位はVLIW型プロセッサで、従来は1個のVLIWプロセッサの中に5個のStream Processorが搭載されたVLIW5構成、最新のRadeon HD 6970(Cayman)はVLIW4構成となっている。VLIWプロッッサは16個で1個のSIMDエンジンを構成する。

 AMDの従来アーキテクチャでは、VLIWコアを6または5命令スロットのVLIW命令で駆動していた。そのため、ドライバのリアルタイムコンパイラで、並列に実行できる命令をVLIWにパックする必要があった。

 AMD GPUは元々4-wayのSIMD型プロセッサを搭載していたが、シェーダプロセッシングの発達でスカラ命令を実行することが多くなったためVLIWに変更したという経緯がある。同様の問題に、NVIDIAは実行を全てシングルレーンにしたSIMD型ユニットの構成を取った。SIMDでは、分岐が発生した場合のコントロールフローに問題が発生するが、それはマスクレジスタを遣ったプレディケーションで解決した。

SIMD発行されるATI GPUのVLIW命令
PDF版はこちら
シェーダプログラムの変化とGPUの対応の違い
PDF版はこちら
ベクタ条件分岐
PDF版はこちら
VLIWコンパイルが不要になった次世代のAMD GPU

 今回、AMDが採用したのは、まさにNVIDIAが取ったのと同じ方法で、16レーンのSIMDユニットで、プレディケーションでコントロールフローを制御する。これによってAMDは複雑なVLIWのコンパイルが不要になり、実行効率が上がった。これまでのVLIWプロセッサでは、アプリケーションによっては非常に低い演算ユニットの稼働率しか得られず、額面上の性能を発揮できないケースが多かった。新アーキテクチャでは、この点が劇的に改善される。


●多数のWaveをインフライトで切り替え実行する
命令のバッファリングとフェッチ

 AMD新アーキテクチャでは、各SIMDはそれぞれ別なワークアイテムバッチ「Wave」を実行できる。Waveは64のワークアイテム(またはスレッド/ストランド)を束ねた単位で、そこから命令毎にWavefrontを実行ユニットに送る。同じワークアイテム群(Wave)に属する命令の波頭がWavefrontというイメージだ。

 新CUでは、命令キャッシュから取り込んだ命令ストリームから、4個のSIMDユニットそれぞれにWaveを割り当て、各SIMDユニット用の命令バッファに命令を貯め込む。各SIMDユニットはそれぞれ個別のプログラムカウンタと命令バッファを備えており、個別にWaveを実行できる。つまり、新CUでは、4個のWaveを並列演算できることになる。

CU全体で40のWaveを保持できる

 各SIMDは、少なくとも10個のWaveをインフライトで保持することが可能で、CU全体では40のWaveを保持できる。つまり、CUは2,560ワークアイテムを切り替えながら並列実行できる。AMDアーキテクチャでは、メモリストールなどが発生した場合にWaveを切り替えて異なるWaveのWavefrontを実行する。10個のWaveを切り替える場合、メモリアクセス命令が4命令おきに来たとすると、4サイクル実行なので合計で160サイクルを隠蔽できる計算になる。また、Demers氏はCUで並列実行するWave群が異なる独立したコマンドストリーム(カーネル)に属していても実行可能だと説明した。


●メモリ階層とバスを根本から改革

 AMDは新アーキテクチャでメモリ階層とバスアーキテクチャも抜本から改革する。従来のAMD GPUのバスは、リードオンリーの上りのパスと、ライトオンリーの下りのパスに分離されていた。テクスチャや頂点はそれぞれ、外部メモリからプロセッサへと「メモリ→キャッシュ→プロセッサコア」という一方向のバスで読み込まれる。通常、このパスでは、クロスバースイッチで複数のメモリコントローラと複数のプロセッサコアが結ばれている。

 こうした上り方向のデータパスとキャッシュメモリ以外に、GPUはプロセッサからメモリへの下り方向のデータパスを持っている。旧来のGPUでは、ピクセルデータがこのパスを通っていた。それに、ピクセルデータ以外のデータを出力するシェーダエクスポートが加わったが、下り専用バスである点は変わらなかった。

 こうした上り下りに分離されたバス構造であるため、従来のAMD GPUはキャッシュも上りのリードオンリーと、下りのライトオンリー(プロセッサからはライトだけ)の2系統になっていた。AMD GPUはこの弱点をカバーするため、プロッッサの中に、明示的な命令で自由に読み書きができるメモリ「ローカルデータシェア」を、またGPU全体でアクセスできる「グローバルデータシェア」を搭載していた。

従来の内部バス
PDF版はこちら
従来のメモリアーキテクチャ
PDF版はこちら

 新アーキテクチャでは、ローカルデータシェアとグローバルデータシェアも互換性のため継承しつつ、キャッシュはCPUと同様のプロセッサから読み書き可能なライタブルキャッシュに切り替えた。L2とL1の2階層で、L2キャッシュはメモリコントローラと接続されている。各64KBずつのL2が、メモリコントローラと同数の複数個搭載されていると見られる。L1キャッシュはCUに各16KBずつ搭載されている。

 L1がライトスルー、L2がライトバックの制御。L2とL1の間と、L1と演算コアの間は、64-Byte(512-bit)幅の広いバスで結ばれている。L2とL1の間はクロスバー接続だが、これはメモリコントローラとGPUのCUの間がクロスバーで接続されているためだ。L2ではCU間のコヒーレンシがハードウェアで保たれている。

 これはFSAのプログラミングモデルでAMDが必要項目に挙げていたポイントで、CPUとGPUは相互にキャッシュをスヌープできるようになるという。ディスクリートGPUの場合はPCI Express経由でコヒーレンシを取る。

新アーキテクチャではプロセッサから書き込み可能なライタブルキャッシュに切り替えた マルチレベルのリード/ライトキャッシュアーキテクチャ
リード/ライトキャッシュの概要 ローカルシェアメモリ
x86 CPUと同様バーチャルメモリ空間をバンドルする

 AMDの新アーキテクチャでは、GPUのメモリコントローラはx86 CPUと同じバーチャルメモリ空間をハンドルするようになる。GPU側にアドレストランスレーションキャッシュを内蔵。CPUとの間でのバーチャルアドレス空間の統合を実現し、同じ64bitポインタでメモリアクセスができるようにする。


●グラフィックスパイプラインを複数化

 従来のAMD GPUは、中央に集中したグラフィックスパイプラインの固定機能ユニットとコンピューティングの制御ロジックを持っていた。Radeon HD 5870(Cypress)ではそれをある程度2系統に分離し、Radeon HD 6970(Cayman)では完全に2系統に分離した。つまり、プリミティブハンドリングとテッセレータ、ラスタライザ回りが2系列になった。

 AMDのGraphics Core Nextでは、これをさらに推し進め、より多くのプリミティブパイプと、より多くのラスタライザを搭載できるようにする。下の図のようになる。この図ではレンダーバックエンド(ROP)がラスタライザのスキャンコンバータとくっついているが、ここは疑問が生じる。レンダーバックエンドは、膨大なメモリアクセスが必要となるため、通常はメモリコントローラ側に接続されているためだ。また、もともとレンダーバックエンドは多重化されている。いずれにせよ、プリミティブパイプとピクセルパイプ(スキャンコンバージョン)が多重化されることは確実だ。NVIDIAがすでに同様の方法を採っている。

3D関連の機能 スケーラブルなマルチタスクグラフィックスエンジン
プリミティパイプとピクセルパイプの多重化

 CUのアーキテクチャを見ると、いくつかのキャッシュを4個のCUで共有する構造となっている。そのため、4個のCUで1セットとなり、プリミティブパイプなどを共有する可能性が高いと推定される。また、新アーキテクチャでは、汎用コンピューティングのための制御エンジンも多重化される。「Asynchronous Compute Engine(ACE)」が、リアルタイムのタスク単位のスケジューリングやキュー、コンテクストスイッチングを司る。コンピュート時には、コンピュートに関係するステイトだけをスイッチすることで、コンテクストスイッチングを軽くする。複数のACEを搭載することで、新GPUではマルチタスクが可能となる。

4このCUが1セットでプリミティパイプなどを共有 マルチタスクが可能になる

●APUへの統合は2013年頃か?

 AMDが今年末を目指して(遅れる可能性もあるとAMDは指摘している)開発している、次世代アーキテクチャ。その概要を見ると、AMD GPUを根本から改革し、汎用コンピューティングでの性能を上げ、FSAでのプログラムの容易さを実現しようとしていることがわかる。

 NVIDIAと異なるのは、依然としてAMDはアーキテクチャ的にグラフィックス性能の維持にある程度寄っている点だ。例えば、旧来のGPUから継承している64ワークアイテムのWavefrontのサイズ。これは、グラフィクスの処理単位が4×4×4の64であると都合がいいためだ。NVIDIAのように、分岐粒度を小さくするため32に減らすという方向は取らなかった。また、演算とテクスチャ処理の比率も保っている。

 とはいえ、この改革で、AMD GPUも、演算アレイに対する制御部分やメモリ部分の比率が大きくなることは確実だ。そのため、従来のAMD GPUのように、ダイ面積当たりの演算ユニット数がNVIDIAに対して圧倒的に多いというアーキテクチャにはならない可能性が高い。このことは、グラフィックス性能にも影響する。

 そのため、AMDはプロセス微細化のチャンスにハイエンド製品からアーキテクチャを切り替える方式を採らざるを得ない。その意味で、今回、28nmプロセスへの微細化で、搭載できるトランジスタ数が倍増するチャンスに、アーキテクチャを改革することは理にかなっている。生パフォーマンスは微細化によるトランジスタの増加で稼ぐという方式で、アーキテクチャの移行を成功させると見られる。

 FSAに合わせて開発した新GPUアーキテクチャ。では、このアーキテクチャのAPU(Accelerated Processing Unit)への統合は、どうなるのだろう。AMDは、CPUとGPUのそれぞれにつき、新アーキテクチャをディスクリート製品で試してからAPUへ統合するという方法を採っている。そのため、APUへの新アーキテクチャの統合は、まだしばらく先になりそうだ。AMDが来年(2012年)投入するBulldozer(ブルドーザ)コアベースのAPU「Trinity(トリニティ)」は、現在、Radeon HD 6970(Cayman)に搭載しているVLIW4ベースのGPUコアを搭載すると言う。APUの進化は、まだまだ継続されることになりそうだ。