後藤弘茂のWeekly海外ニュース
「Maxwell」アーキテクチャはNVIDIA版APUへの布石
(2014/2/28 12:15)
Keplerでの電力効率追求をさらに発展させたMaxwell
NVIDIAは、新世代のGPUアーキテクチャ「Maxwell」を投入した。鳴り物入りの登場でないのは、今回は低パフォーマンスのメインストリームGPUからの投入だからだ。従来のような、ハイエンドGPUやパフォーマンスGPUからの投入でないため、あまり目立たない。しかし、アーキテクチャとしてのMaxwellは、「Kepler」に続くNVIDIAのGPUアーキテクチャの新しいステップであり、NVIDIAにとって極めて重要だ。
Maxwelアーキテクチャの最初のGPUは、ビデオカード価格で100ドル台の「GeForce GTX 750 Ti/750」。パフォーマンスGPUクラスではない。だが、Maxwellアーキテクチャ自体は、GeForceの全てのレンジのみならず、GPUコンピューティング向けのTeslaから、モバイルSoC(System on a Chip)のTegraのGPUコアまで、全てをカバーする。NVIDIA製品ライン全体の共通アーキテクチャとなる見込みだ。また、ハイエンドのMaxwellはDenver(デンバー)CPUコアを内蔵したAPU型の構成になると見られている。
Maxwellは、モバイルへの搭載を開発当初から考えて設計された最初のGPUアーキテクチャだ。KeplerもモバイルTegraに搭載されたが、Keplerを開発し始めた時点では、TegraへのKepler搭載は考えていなかったという。“TeslaからTegraまで”を最初に意識して開発されたのはMaxwellからとなる。
Maxwellは、NVIDIAのGPU開発路線の変化を象徴している。NVIDIAの路線変化を一言で言えば、パフォーマンスフォーカスからパフォーマンス/ワット(電力)フォーカスへの転換だ。NVIDIAはFermiからKeplerで劇的に路線を転換、パフォーマンス/パワーオプティマイズド(電力効率最適化)の設計へと切り替えた。パワーパフォーマンス、エリア(PPA)の3要素の中で最適化のポイントを変えた。
まず、Keplerでは、GPUのパイプライン段数をFermiまでの世代より半分に減らして動作周波数を抑え、その代わりにコア(演算ユニット)数を増やした。また、ハードウェア制御のWarp/命令スケジューリングを、半分ソフトウェア(コンパイラ)へと移した。
Maxwellは、そのKeplerの思想をさらに推し進めたGPUアーキテクチャだ。
現在のNVIDIAは、モバイルにも適用できる電力効率を全てのプラットフォームにもたらそうとしている。それは、ムーアの法則が鈍化した時代に対応した、プロセス技術の発達に頼らないアーキテクチャ面での効率の向上でもある。
Intel以外のプロセッサメーカーは、現在、CMOSスケーリングの諸要素のスケーリングペースが鈍化した状態で、プロセッサの性能を上げようと苦闘している。プロセス技術の進化による電力低減や性能向上に頼りにくくなっているため、アーキテクチャ上の工夫で電力当たりのパフォーマンスを上げて行かなければならない。Maxwellは、そのチャレンジに対する、NVIDIAの解答だ。
ムーアの法則の鈍化のために28nmプロセスでスタート
Maxwellアーキテクチャは、前世代のKeplerを発展させたものだ。NVIDIAアーキテクチャは、FermiからKeplerで大きく転換した。GPUの型番で言えば、GeForce GTX 500からGeForce GTX 600世代でアーキテクチャを根本から変えた。それに対して、今回のMaxwellは、Kepler路線の延長であり、前回ほど劇的な変化ではない。しかし、Maxwellアーキテクチャには、非常に重要なポイントがいくつも見える。
まず、Maxwellは、Keplerと同じ28nmプロセス技術(かつ、同じプロセスオプション)で製造しながら、電力効率を向上させている。プロセス技術以外の要素での効率の向上を実現した。Maxwellは、もともとの計画では20nmプロセスだったと見られるが、28nmでスタートしなければならなくなったことで、アーキテクチャ面での省電力化がより強く求められるようになった。
Maxwellの基本アーキテクチャはKeplerと似ているが、NVIDIA GPUのプロセッサコアの単位である「SM(Streaming Multiprocessor)」の構造を大きく変えた。KeplerのSMである「SMX(Streaming Multiprocessor eXtreme)」では非常に大きな粒度のSMを採用したが、Maxwellの「SMM(Streaming Multiprocessor Maxwell)」では小さなブロックを4個集合させて1個のSMにする新しい方式を採用した。
このMaxwellアーキテクチャSMのポイントは、(1)SM内部の実行ユニットの稼働率を高めて、より少ない演算ユニットで高効率の性能を得られるようにしたこと。(2)SM自体の構造を階層化とシンプル化することで、設計上の効率性を高めたこと。(3)SM自体をコンパクトにして、1個のGPUにより多くのSMを搭載できるようにしたことにある。
効率効率の向上のカギは、命令発行と実行ユニットの関係を変えた点にある。実行ユニット数に対する命令発行数の比率を増やして、実行ユニットの稼働率を高めた。Keplerでのピーク性能重視から、Maxwellでは実効性能の重視に転じて、演算ユニットに対する命令ディスパッチの比率を高めた。つまり、Keplerはゴリゴリに命令発行を最適化すれば高い実行ユニットの稼働率を発揮できるが、Maxwellは最適化しなくても、そこそこの実行ユニット稼働率を達成できる。
また、命令ユニットと実行ユニット、データパスの関係を、よりシンプルにしてSM設計の複雑性を軽減した。ここはGPU設計では重要なポイントで、Keplerで過剰に複雑になったSM設計は、ダイ当たりの効率性を落としていた。また、Maxwellではメモリ階層は大幅に手を加えられ、よりシンプルで効率の高いキャッシュとデータパスになった。
また、SMの構成を、ブロック→SMの2階層にしたことで、コンパクトなSMの設計と制御のシンプル性と、大型のSMでのリソースの有効利用や多数のスレッド間のデータ共有の利点を両立させた。
DRAMの制約のためにメモリと演算の比率はさらに演算偏重に傾く
チップ全体で見ると、Maxwellでは、演算パフォーマンスに対するメモリ帯域の比率(Bytes/FLOPS)をさらに演算偏重にした。現状でも非常に悪いBytes/FLOPS比率をさらに悪化させるネガティブな要素だ。だが、これにはDRAMの転送レートの鈍化という外部的な要因(DRAM技術)があり、NVIDIA単体ではどうにもならない。メモリの高帯域化が鈍化している現状では、スタックドDRAMが登場するまであと1世代は、GPUは演算偏重へと向かわざるを得ない。
Maxwellでは、この問題をカバーするため、キャッシュを大幅に増量して、アプリケーションによっては外部メモリアクセスの頻度を下げることができるようにした。従来のGPUは、グラフィックスワークロードではキャッシュのヒット率が低いことを前提として、少量のキャッシュしか搭載していなかった。しかし、MaxwellアーキテクチャではCPU並のMB単位のキャッシュを載せるようになった。
ただし、大容量キャッシュはメモリバウンド(メモリ帯域が制約になる)のきついストリームタイプのワークロードには効きにくいため、根本解決ではない。ちなみに、SRAM面積を大きくすることは、演算コアを増やすことで増える高クロック品のアクティブ時の電力密度を下げる効果もある。
Maxwellアーキテクチャでは、演算/テクスチャ比率も演算に偏った。これも全く同じ理由で、メモリ帯域に制約があるため、演算コアと同比率でテクスチャユニットを増やしても意味が無いためだ。
こうしてMaxwellアーキテクチャの全体を見ると、Keplerに対してシンプル化と高効率化を実現し、ムーアの法則が鈍化した状況でのパフォーマンス/電力効率の向上を図り、その一方で、まだ解決できないメモリ帯域の制約に対してはとりあえずキャッシュの増量で対処したと言えそうだ。ただし、メモリ帯域制約とBytes/FLOPS比率の悪化については、Maxwellの次の「Volta(ボルタ)」アーキテクチャ世代では、スタックドDRAMで(パフォーマンスGPUから上の製品については)軽減できるメドが立っている。あくまで一時的な制約だ。
階層構造となりシンプル化されたSMアーキテクチャ
Keplerでは、1つのSM(Streaming Multiprocessor)の中に、192個の演算ユニット(CUDAコア)が搭載されていた。それに対して、Maxwellアーキテクチャでは、SM内のCUDAコアの数は128ユニット。しかも、SMは4個のクラスタに分割され、それぞれが32ユニットずつのCUDAコアを搭載する。また、各クラスタに、1個の命令スケジューラと2個の命令ディスパッチユニット、そして1個のSpecial Function Unit(SFU)、1個のロード/ストアユニット、64KB(32-bitレジスタ×16,384)を備える。
MaxwellのSMでは、このシンプルなクラスタが2個結合され、テクスチャユニットとテクスチャ&L1キャッシュを共有する。そして、SM全体で、64KBのシェアードメモリとテッセレータなどのジオメトリパイプラインを共有する。KeplerではCUDAコア(演算ユニット)は実際には16-wayのベクタユニットとしてまとめられていた。それに対して、Maxwellでは32-wayのベクタユニットの構成となっている。
NVIDIAは、実行ユニットに対する命令発行の比率を変えたことで、実行ユニットの稼働率を高めたと説明する。その結果、128個のCUDAコアを備えるMaxwellのSMは、192個のCUDAコアのKeplerのSMに近い性能を発揮できるという。また、1個のSMのダイエリアも縮小したと言う。そのため、NVIDIAはメインストリームGPUに搭載できるCUDAコアの数を増やすことができた。
チップ全体で見ると、現在のメインストリーム版Maxwell GPUは下のようになっている。GeForce GTX 750 Tiでは、MaxwellのSMを5ユニット搭載し、CUDAコアはチップ全体で合計640個となる。動作クロックはベースが1,020MHz、ブースト時が1,085MHz。演算パフォーマンスは1.3TFLOPSに達する。メモリはGDDR5 5,400Mtpsで128-bitインターフェイス。TDPは60Wとなる。
ダイサイズは増えたがパフォーマンス/電力は大幅に向上
MaxwellベースのGM107のダイサイズは約148平方mm。GM107のダイサイズと各ユニット数を、従来の28nm KeplerやAMDの28nm GPUと比べると、下の図のようになる。NVIDIAのGM107の構成は、ちょうどAMDのメインストリームGPUの構成と一致する。
Kepler世代のメインストリームGPU「GK107」の118平方mmよりかなり大きくなった。ただし、MaxwellアーキテクチャのGM107には、2MBのキャッシュSRAMが含まれている。GK107との比較では、CUDAコアの数は384から640へと大きく増えた。ピークの演算パフォーマンスは1.6倍となり、その一方でTDP(Thermal Design Power:熱設計消費電力)は7%ほど下がった。そのため、電力に対するピーク性能は1.7倍に上がり、演算ユニットの実稼働率が上がることで、実効性能効率では2倍に上がったという。
その一方で、ピークメモリ帯域の増加は8%程度に留まる。これは、GDDR5のメインストリーム品の転送レートが上がらないためだ。そのため、NVIDIAはテクスチャユニットの数については、GK107の32ユニットに対して、GM107は40ユニットと25%ほどしか増やさなかった。その結果、SM内での演算ユニットに対するテクスチャユニットの比率は低下している。SMの数はGK107の2ユニットからGM107の5ユニットへと2.5倍に増えたが、SM当たりのテクスチャユニット数は2分の1になり、チップトータルのテクスチャユニット数は25%の増加となる。
Maxwellアーキテクチャをより詳しく見ると、このアーキテクチャの方向性がさらに明瞭になる。特に、実行ユニットに対する命令発行は、Maxwellでは大きく変わった。次回は、Maxwellの効率化の源泉となっているSMアーキテクチャとメモリ階層にスポットを当ててより詳細を見てみたい。