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

AMDが次世代GPUアーキテクチャ「Vega」の概要を明らかに

~6年振りのアーキテクチャ刷新

多様なワークロードに対応したGPUアーキテクチャとなるVega

6年振りのアーキテクチャ刷新となるVega

 AMDは、次世代GPUアーキテクチャ「Vega(ヴェガ)」の概要を明らかにした。VegaはAMDのFinFET世代のフラッグシップGPUだ。大きな特徴は、GPUマイクロアーキテクチャを刷新したこと。そして、ハイパフォーマンスのハイエンドGPUから導入されることだ。

 AMDは、Southern Islandsファミリの「Radeon HD 7900(Tahiti)」で「GCN(Graphics Core Next)」を導入して以来、GPUのコンピュートユニット「CU(Compute Unit)」のメジャーチェンジは行なっていない。ベースアーキテクチャはGCNのままで、相対的にマイナーな拡張を加えてきた。しかし、今回のVegaでは、マイクロアーキテクチャを一新。CUだけでなく、シェーダの制御やメモリ階層まで全てに渡って大幅に変革する。AMDにとっては、6年振りのGPUアーキテクチャの大変革となる。

 AMDは、FinFET 3Dトランジスタプロセスでは、昨年(2016年)パフォーマンスGPU「Polaris(ポラリス)」を導入した。しかし、Polaris世代ではハイエンドGPUは空席のままだった。Vega世代の「Vega 10」は、AMDにとって2年振りのハイエンドGPUとなる。

 Vegaアーキテクチャは、グラフィックスとコンピュート、メモリ容量と全ての面でのパフォーマンスを飛躍させる。コンピュートでは深層学習への対応とFinFETプロセスを活かしたマイクロアーキテクチャへの転換。深層学習向けのデータ精度の導入と、GPUの動作クロックを大幅に引き上げるアーキテクチャを採った。

 グラフィックスでは、ジオメトリパイプラインの制御を大幅に変更した。新たに「プリミティブシェーダ(Primitive Shader)」ステージを導入、ジオメトリスループットを2倍に引き上げる。また、ラスタイザも一新し、プログラマブルなメソッドを導入した。さらに、オンチップメモリ階層では、レンダバックエンドもL2でキャッシングされるようにした。

 メモリ階層では、GPUでは初めて不揮発性メモリの導入を前提としたメモリ制御を取り入れる。これは、近い将来に躍進すると期待される、新不揮発性メモリ技術を見据えた対応だ。このメモリアーキテクチャは、AMDがエクサフロップススーパーコンピュータのメモリモデルとして提案しているものと同じだ。また、データ移動の最適化を行なうことで、データの無駄なトラフィックも抑える。

 AMDのVegaは、このように、グラフィックスだけでなく、コンピュートやビジュアライゼーションまで全てに渡ってパフォーマンスを強化した新アーキテクチャとなっている。

マイクロアーキテクチャが変わるコンピュートユニット

 VegaのCU(Compute Unit)は、「Next-Generation Compute Unit(NCU)」となり、内部マイクロアーキテクチャが一新される。まだ詳細は明らかにされていないが、目玉となるフィーチャは明かされた。

 現在のCUでは、32-bitの積和算ユニット16ユニットで1個のベクタユニットを構成している。1個のCUには、4個のベクタユニットがあり、合計で64の32-bitユニットを備える。各ユニットが積和算で1クロックに2オペレーションのスループットとなるため、CU合計での32-bitオペレーションは、クロック当たり128となる。

 AMD GPUは、64スレッドのバッチであるWavefront単位で処理を行なう。各ベクタユニットは、16ユニットで4サイクルかけて、Wavefrontを処理する仕組みだ。

 NCUでは、新たに低データ精度のSIMD(Single Instruction, Multiple Data)演算が導入される。具体的には、2-wayの16-bit SIMD演算と、4-wayの8-bit SIMD演算が加わる。これは、低データ精度が求められるマシンラーニングアプリケーションに合わせた拡張だ。

 AMDも、他のGPUメーカー同様に演算ユニットの基本のデータ精度は32-bitだ。しかし、深層学習では、性能を上げるために、より精度が低い16-bitや8-bitが使われ始めている。AMDでは、そうしたトレンドに対応して、演算ユニットを大幅に改変した。

VegaのNCUでは16-bitと8-bitの演算性能がブーストされる

 16-bit時にはスループットは32-bit時の2倍、8-bit時にはスループットは4倍となる。AMDは既に、Vega10ベースのGPUコンピュート向け製品「Radeon Instinct MI25」では、1カードで16-bit浮動小数点演算で25TFLOPSを達成できることを明らかにしている。NVIDIAのPascal(パスカル)ベースの「Tesla P100(GP100)」の21TFLOPS(FP16)を上回る。8-bitのオペレーションはさらに倍の性能となる計算だ。

パックド型の16-bitと8-bit演算を導入

 AMDの現在のアーキテクチャでは、32-bit時はプレディケーションによって条件分岐に対応している。ベクタユニットの中の32-bitの各レーンは、同じ命令を実行するが、それぞれがマスクレジスタによって分岐パスだけが実行され、個別にコントロールフロー制御される。そのため、32-bit時には、見かけ上は独立したスレッドとして各レーンが動作する。

 それに対して、今回導入された16-bitと8-bitの演算はパックド(packed)型、つまりSIMDとなっている。32-bitの1レーンの中で、16-bit時は2データが、8-bit時は4データがパックされ、同じ命令を実行する。16-bitと8-bitは、個々に異なる分岐パスを実行することができない。しかし、深層学習用途の場合、パックドで対応できるため、演算性能が向上する分だけ性能が上がる。

 GPUへのパックドフォーマットの低データ精度演算の導入は、深層学習時代に入ってのトレンドだ。NVIDIAも対応を進めているほか、Imagination TechnologiesのPowerVRなども対応している。

ニューラルネットワークの深層学習にフォーカスするAMD

 VegaのNCUのもう1つの重要な特徴は、高クロック化だ。AMDはクロックを引き上げるためにパイプラインを変更したと見られる。パイプライン段数が2倍になると、原理的にはGPUコアの動作周波数を倍近くに引き上げることが可能になる。これも、FinFETプロセス時代に入ったGPUコアのトレンドとなりつつある。

パイプライン段数を増やして高クロック化を図るVega

 FinFETでは、リーク電流(Leakage)が大幅に下がり、動作周波数あたりのアクティブ電力も下げることができる。そのため、パイプラインの細分化による高クロック化を行なうことが可能になる。電力の低下分を、高クロック化に振り向けるイメージだ。

 パイプライン段数を増やすと、パイプライン中のデータを保持するラッチ回路が増える。ラッチはロジック回路中の大きな電力消費源であるため、リーク電流(Leakage)が多いプロセスでは、パイプライン段数を増やしにくかった。しかし、Vega世代は、低リーク電流(Leakage)の14nm FinFETプロセスで製造されるためパイプライン段数を増やすことが可能となる。

爆発するデータ量に対応するためのメモリ階層

 GPUは現在、扱うデータ量の爆発的な増大に直面している。ゲームのインストールサイズは激増しており、映画制作などのプロフェッショナルグラフィックスのデータ量も急激に大型化している、そして、ビッグデータ解析とマシンラーニングによって、コンピュートのデータ量は天文学的な数字に膨れ上がりつつある。

GPUのアプリケーションのデータ量は急増しつつあり、GPUの演算パフォーマンスも伸びているが、GPUのメモリ容量は見合うほど増えていない

 問題はGPUのメモリ容量が、そうしたデータ量の増大や、GPUの演算パフォーマンスの増大に見合うほど増えていないことだ。そこで、Vegaからは新しいメモリ階層のアプローチを導入する。GPUメモリを広帯域キャッシュとして扱い、GPUパッケージ外のメモリをシームレスに扱うことができるようにする。

 具体的には、VegaではスタックDRAMの「HBM2」をGPUメモリとして導入する。Vega10では、2スタックとなる。しかし、GPUパッケージのインタポーザ上に乗ったHBM2だけでなく、オフパッケージのメモリもGPUが扱えるようにする。HBM2はあたかもキャッシュのように扱う。と言っても、ハードウェア制御でタグRAMを備えたキャッシュではなく、メモリ制御としてワーキングメモリとして扱うイメージだ。

Vega10のGPUメモリはHBM2
メモリコントローラの振るまいを大幅に変更

 不揮発性メモリ(NVRAM)を含めたメモリを、GPUが直接扱う、あるいは直接扱っているようにできる仕組みを用意する。GPUのDRAM容量をいたずらに増やすのではなく、アドレッシングできるメモリを多様化することで、大容量化するデータに対応する。そのため、Vega10では512TBまでのバーチャルアドレススペースをサポートする。そして、階層化されたメモリ間で効率良くメモリをアロケートすることで、高性能で低電力なメモリを実現する。

アロケートした全データのうち実際にタッチするデータを効率的に配置する

新シェーダステージとラスタライザ、キャッシュ階層の改良

 ジオメトリパイプラインでは、頂点シェーダ(Vertex Shader)に加えてジオメトリシェーダ(Geometry Shader)を加えていた。Vegaでは新たなジオメトリパスとして「プリミティブシェーダ(Primitive Shader)」を導入する。プリミティブ単位で扱うことで、ピークのスループットを高める。また、レンダリングパイプライン全体のワークロードの制御もインテリジェント化する。

 AMDアーキテクチャでは、レンダバックエンドとテクスチャアクセスはコヒーレントしていなかった。そのため、レンダツーテクスチャでテクスチャを書き換えるような場合には、GPU内部キャッシュ階層を使うことができなかった。Vegaでは、レンダバックエンドもL2キャッシュでキャッシングされるようになり、L2でキャッシュされるテクスチャとコヒーレントできるようになった。また、ジオメトリからピクセルへのラスタライズもスマート化された。これは、VR(Virtual Reality)のような、2視点のアプリケーションで効果を発揮すると見られている。