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

高い電力性能比を実現した「Geforce GTX 980」の秘密

待望のMaxwellアーキテクチャのハイエンドGPU

 NVIDIAが、新アーキテクチャのハイエンドGPU「Geforce GTX 980/970(GM204)」を発表した。最大2,048個のCUDAコア(浮動小数点積和算FMADユニット)を備え、ベースクロックで4.6TFLOPSを叩き出す。550ドルクラスのハイエンドGPUとしては、極めてパワフルなGPUだ。その上で、効率の高いマイクロアーキテクチャに変えることで、TDPは165Wに抑えた。性能/電力は、前世代のKeplerの同クラスGPUと比べて約2倍近い。

 GM204の投入で、NVIDIAはいよいよ新世代Maxwellを“本格的”に市場に出すことになる。“本格的に”と付けたのは、NVIDIAは既に100ドル台のバリュークラスGPU「GeForce GTX 750 Ti/750(GM107)」でMaxwellアーキテクチャを導入しているからだ。しかし、GM107と今回のGM204では、GPUの規模が違う。

GM204の概要
PDF版はこちら
GM204のブロックダイアグラム

 上はGM204の全体構成だ。GPU全体は4個のミニGPUと呼ぶべきクラスタ「GPC(Graphics Processing Cluster)」で構成されている。各GPCはそれぞれ4個のSM(Streaming Multiprocessor)を含む。SMは合計16個で、各SMは128個のCUDAコアや8個のテキスチャユニットなどを備える。メモリインターフェイスは256-bit幅でGDDR5 7Gtpsをサポートする。

 それに対して、GM107は下の図のように、1個のGPCに5個のSMの構成で、メモリインターフェイスも128-bitだった。最小構成のGPUだ。

GM107の概要
PDF版はこちら

 しかし、GM204は、単にGM107を大構成にしたGPUではない。アーキテクチャ面で多くの新技術が加えられており、同じMaxwellでも、アーキテクチャ的に全く別物となっている。

グラフィックス専用ユニットを大幅に強化したGM204

 Maxwellでは、GM107と比べると、グラフィックス機能の面で拡張が大きい。目立つのは、これまで多かったシェーダ実装(=ソフトウェア実装)のグラフィックス機能拡張ではなく、固定ハードウェアの拡張を伴う機能拡張が多い点だ。言い換えれば、グラフィックス専用のハードウェア機能を拡張した部分が多いのがGM204だ。

 GM204で実現されたのは、前後フレーム間でのアンチエイリアシング「Multi-Frame Sampled AA(MFAA)」や、4K解像度でレンダリングした画像をディスプレイ解像度に合わせてスケールダウンする「Dynamic Super Resolution」、間接光を表現する大域ライティング技術「Voxel Global Illumination (VXGI)」、それを支援する「Conservative Raster」、高効率のピクセルデータ圧縮技術など。いずれも、ROP(Rendering Output Pipeline)やジオメトリパイプライン、ラスタライザといったグラフィックス固定機能ハードウェアの拡張を含む。

 つまり、GeForce GTX 980/970とは、コアアーキテクチャをMaxwellに変えて性能/電力を大幅に向上しながら、グラフィックス固定機能を各所で拡張したGPUだ。NVIDIAは、現在、最上位のGPUはGPUコンピューティング向けの機能を充実させ、その1つ下のGPUはグラフィックスにフォーカスする路線を取っている。GM204は、後者のGPUであり、NVIDIAのMaxell世代のグラフィックス製品のフラッグシップとなる。つまり、ハイエンドグラフィックス&GPUコンピューティング向けの、さらに大きなMaxwellが後に控えていることになる。

NVIDIAのKepler/Maxwell世代の各GPUのダイサイズとユニット構成のチャート
PDF版はこちら

Maxwell世代のグラフィックス向けのフラッグシップ

 今回は、Maxwellのアーキテクチャを概観し、仕様とアーキテクチャ面での変更にフォーカスしたい。

 Geforce GTX 980のコードネームGM204は、多くのことを意味している。GMはグラフィックス製品でMaxwell世代を示す。3桁目の2は2世代目のアーキテクチャを、1桁目の4は性能レンジの製品であることを示している。トップエンドGPUの場合は1桁目が0になる。1桁目が4の製品は、その下の300~600ドルレンジのグラフィックスボード製品向けのGPUとなるのが一般的だ。ちなみに、1桁目が6~9のGPUは、さらに下のメインストリーム&バリュー市場向けとなる。

 コードネームから分かる通り、Geforce GTX 980(GM204)は、「GeForce GTX 680(GK104)」の後継となる。GeForce GTX TITAN(GK110)の後継ではない。しかし、演算性能では、GM204はGK110に迫っており、メモリ帯域とテクスチャ性能を除けば両者は非常に近い。ちなみに、1桁目が4のハイエンドGPUはメモリインターフェイスが256-bit、最上位GPUはメモリインターフェイスが384-bitで、これがメモリ帯域の違いの源となっている。

MaxwellとKeplerの性能とハイエンドGPUのスペック比較。参考にメインストリームのMaxwellも加えてある
PDF版はこちら

 上のスペック比較で目立つのは、GPUクラスタであるSMの数が増えたこと。MaxwellではSMの構成が変わり、KeplerのSM当たり192 CUDAコアから、SM当たり128 CUDAコアになった。つまり、SM当たりのCUDAコアの数が3分の2になり、SMがコンパクトになった。GM204では、SMを16個載せることで2,048 CUDAコアを搭載している。動作周波数はベースが1,126MHzで、ブーストが1,216MHz。ベース周波数で計算すると単精度浮動小数点演算性能はピークで4,612GFLOPS、ターボ周波数では4,980GFLOPSと5TFLOPS近くなる。

伸び悩むメモリ帯域をカバーするカラー圧縮技術

 演算性能の伸びに対して、GM204のテクスチャユニット数は128でGK104と変わらないが、これはテクスチャはメモリ帯域に縛られるからだ。メモリ帯域は、GK104がGDDR5の6,008Mtps転送レートで192.3GB/secのピークメモリ帯域だったのに対して、GM204は7,000Mtpsで224GB/secの帯域。生のメモリ帯域的にはピークで17%程しか伸びていない。GDDR5技術が、転送レート引き上げの限界に近づいているからだ。

 特徴的なのはROPで、GM204は64ユニットのROPを備えており、これはGK104の32ユニットどころか、GK110の48ユニットよりも多い。ROPもメモリ帯域に縛られるのに、GM204のROPが大幅に強化された理由は、カラー圧縮技術によってメモリアクセスのデータ量を減らし、グラフィックス時の実効メモリ帯域を引き上げたからだ。NVIDIAは、圧縮技術によって9,300Mtps相当のメモリ帯域になると説明する。計算上のメモリ帯域は297GB/secに達する。

ピンク色になっている部分はデータが圧縮されている部分
ゲームによって異なるが、Kepler世代より高い17~29%も圧縮率が高くなる

 GM204でROPが64ユニットになったのは、ROPはメモリコントローラに付属し、8ユニットで1単位となっているため、ROPを増やす場合は8の整数倍でなければ難しいからだ。GK104のDRAMコントローラ当たり8ROPから、GM204では16ROPへと倍加させた。これを1.5倍に留めようとすると、増やす8ROPユニットを2つのDRAMコントローラにまたがる形で配線しなければならず難しい。

 MaxwellではL2キャッシュが強化された。GM204は2MBのL2を備えており、GK104に比べて4倍となっている。これは、GPUコンピューティングではキャッシュのヒット率が高くなることを意味している。TDPはGM204が165Wで、GK104の195Wより低い。そのため、GFLOPS/TDPはベース周波数で28、ターボ時に30と非常に高い。GK104と比べた場合、ほぼ2倍となっている。ただし、公平に言えば、演算ユニット比率が高まるとTDPに対する電力効率は高まる傾向があり、Kepler世代でもGK110は電力効率が20.5と高い。Maxwellで電力効率がKeplerの2倍になったというのは大げさな比較だ。

Keplerでの電力効率追求をさらに発展させたMaxwell

 なぜ、Maxwellは性能/電力が高いのか。さまざまな理由が複合するが、最も大きな要素は、MaxwellではSMのマイクロアーキテクチャが変わった点にある。そもそも、NVIDIAは、前々世代の「Fermi」から、前世代のKeplerに移る時に、性能&面積最適化設計から、性能/電力最適化設計へと切り替えた。ハードウェアベースのwarpスケジューリングの大半をソフトウェア(コンパイラ)ベースへと切り替え、命令ユニットを簡素化した。また、KeplerではGPUのパイプライン段数をFermiまでの世代より半分に減らして動作周波数を抑え、その代わりにコア(演算ユニット)数の並列性を増やした。

KeplerとFermiのアーキテクチャ比較
PDF版はこちら
Keplerのパイプライン
PDF版はこちら

 しかし、KeplerのSMも、まだ非効率な部分が多かった。Keplerでは4個の命令ユニットから最大8命令をディスパッチするが、命令ユニット間で共有する実行ユニットが多かった。そのため、命令スケジューリングが複雑で、効率よく稼働させることが難しく、ハードウェアも複雑だった。下の図だと分かりにくいが、実際にはKepler SMは大きく2つに分かれており、それぞれの2分の1のSMに2つの命令ユニットが命令を発行する。

KeplerのSMXブロック
PDF版はこちら

 そこで、NVIDIAはMaxwellでは、SMをKeplerから刷新した。ポイントは、SM内部の実行ユニットの稼働率を高めて、より少ない演算ユニットで高効率の性能を得られるようにしたこと。SM自体の構造を階層化とシンプル化することで設計上の効率性を高めたこと。SM自体をコンパクトにして、1個のGPUにより多くのSMを搭載できるようにしたことにある。

 下はMaxwellのSMだ。最初のMaxwellであるGM107と今回のGM204では、SM自体の構成にも若干違いがあるが、図はGM204のものだ。ぱっと見て分かるように、MaxwellではSMの内部が4つのサブユニットに明確に分かれた。それぞれが32ユニットずつのCUDAコアを搭載する。

MaxwellのSM
PDF版はこちら
Maxwellのブロックダイアグラム

 また、各サブユニットに、1個の命令スケジューラと2個の命令ディスパッチユニット、そして1個のSpecial Function Unit(SFU)、1個のロード/ストアユニット、64KB (32-bit Register×16,384)を備える。2個のサブユニットで、テクスチャユニットとテクスチャ/L1キャッシュを共有する。また、4個のサブユニットで、共有メモリや命令キャッシュなどを共有する。

 Keplerとの最大の違いは、個々の命令ユニットの下に、実行ユニットが明瞭に分割されたこと。共有する実行ユニットはレイテンシの長いテクスチャユニットだけとなった。また、CUDAコアは32-wayの構成となった。もっとも、Keplerでも、当初のNVIDIAの説明と異なり、CUDAコアは32-wayの可能性がある。

warpスケジューリングを向上させたMaxwellアーキテクチャ

 MaxwellのSM構成の何が有利かというと、それはwarpのスケジューリングが極シンプルになることだ。NVIDIA GPUは、warpと呼ぶ32スレッドのバッチをSIMT(Single Instruction, Multiple Thread)実行するスタイルを取っている。Maxwellの命令ユニットは、warpスケジューラが1つのWarpから1から2命令をピック、それらを実行ユニットにディスパッチする。Maxwellアーキテクチャでは、1命令ユニットに、32-wayのCUDAコアベクトルプロセッサが1個の構成だ。つまり、毎サイクル、1個のwarpから1命令をCUDAコアにディスパッチし続けるというシンプルなスケジューリングができる。

Maxwellでのスケジューリング
PDF版はこちら

 これがKeplerの場合、1命令ユニットに対して1.5倍のCUDAコアがある。CUDAコアは16-wayの構成で2サイクルで1 warpに対する命令を実行する。もしかすると、KeplerのCUDAコアは32-wayの構成かもしれないが、いずれにせよ、命令ユニットはCUDAコアで実行する命令についても並列性を見つける必要がある。また、Keplerでは、ロード/ストアユニットやSuper Function Unit(SFU)も命令ユニット間の共有リソースになっていた可能性が高い。

 Keplerでは、こうした構成のために、命令発行は非常に複雑だった。実行ユニットの構成は、各サイクルに8個のwarp分のスレッドに対する命令を実行できるようになっていた。そのため、スケジューラがフルに命令をピックできなければ、実行ユニットをフル稼働させることができなかった。また、物理的にも命令ユニット間で共有するユニットは、命令ユニット毎に分かれたレジスタファイルへの接続が必要で、複雑だった。特に、もし、KeplerのCUDAコアが32-wayだった場合は、共有されるCUDAコアは2つのレジスタへのパスを持っていることになる。

各GPUの命令実行
PDF版はこちら

 こうした構成から、KeplerではSMの構成は複雑で、実行ユニットの稼働率が悪く、ムダに電力を消費していた。これは、Keplerが命令ユニットに対する実行ユニットの比率を追求して、ゴリゴリに最適化しないとフル稼働が難しい構成を取っていたためだ。それに対して、Maxwellでは、命令発行と実行ユニットの関係を変え、余裕を持たせた。実行ユニットの比率が低いので、稼働率が高くなる。特に、CUDAコアに対する命令発行がシンプルになったことは大きい。各サイクルに1 warpの演算命令を投げればいいだけなので、効率はよくなる。

メモリ階層では役割が縮小したL1キャッシュをシンプル化

 電力消費を抑え構成をシンプルにするというMaxwellの設計思想は、メモリ階層にも及んでいる。Keplerのメモリ階層では、L1キャッシュは共有メモリとのコンフィギュラブルメモリ構成部分と、テクスチャキャッシュと共通化されたリードオンリーL1の2系統に分かれていた。コンフィギュラブルメモリは、共有メモリとL1キャッシュのサイズを切り替えることができた。ただし、Keplerではグローバルロード/ローカルロードのどちらもL2キャッシュから取りこんでおり、L1はバイパスされている。L1キャッシュの用途は、主にレジスタや共有メモリのスピル受けとなっていた。

Keplerのメモリ階層
PDF版はこちら

 Maxwellでは、メモリ階層はすっきりと整理され、L1キャッシュはテクスチャキャッシュと共通化された1系統だけになった。コンフィギュラブルメモリはなくなり、単一の共有メモリだけとなり、共有メモリからL1へのスピルもなくなった。その代わり、GM204では共有メモリが96KBへと50%増量(GM107は64KBのままだった)されている。

Maxwellのメモリ階層
PDF版はこちら

 NVIDIAがKeplerでL1をスキップするようになったのは、L1アクセスが電力のムダになるとみなしたからだという。GPUの場合、少量のL1にヒットする率は限られている上に、膨大な書き込みが生じる。それをなくすことで、GPU全体の電力の効率化を図った。Maxwellでは、その思想をさらに進めて、L1キャッシュをシンプル化し、再び重要度が高まった共有メモリを強化した。

 こうしたNVIDIAの設計思想は、電力効率を第1に考えれば正しいが、プログラミングの容易性という点では一歩後退となる。L1が当たっていたFermi世代に対して、Keplerでは再び共有メモリを活用しなければ性能が上がりにくくなり、Maxwellでも積極的な共有メモリの活用が求められる。その一方で、L2は大幅に増量されているため、L2でヒットする確率は高まった。しかし、L2はレイテンシが長いため、共有メモリを活用しないとストールなしで回すことが難しくなる。

28nmプロセスのままでダイを大型化

 実際には、こうしたSMの構成だけでなく、各所に省電力化の仕掛けがあるが、SMのアーキテクチャ変革の要素は大きいと見られる。結果として、MaxwellではKepler世代より電力効率が大幅に上がっている。Maxwellのポイントはここで、GM204は製造プロセス技術的には28nmで従来のKepler GPUと変わらない。にもかかわらず、TDPを下げながら、性能が上がっている。

 現在のMaxwellが28nmプロセスに留まっているのには、複雑な事情がある。後の記事で詳しい説明を行なうが、GPUでは次の20nmプロセスに早期に移行する意味があるのは、ハイエンドGPUだけだ。そのため、これまでと比べると、プロセスの移行のペースは非常に遅い。

 だが、そのために、GPUのダイは大型化している。今回のGM204は、ダイサイズが398平方mmとほぼ400平方mmクラスだ。Intelと比較すると8コアのHaswell-Eの354平方mmよりもまだ一回りダイが大きい。ダイが大きなXbox OneのAPUの363平方mmと比べても大きい。同じハイエンドGPUのGK104は294平方mmだったので、35%も大きくなったことになる。トランジスタ数は52億で、GK110の71億に近づいた。

GPUのダイサイズ推移
PDF版はこちら
GPUのトランジスタ数推移
PDF版はこちら

 現在、ロジックプロセスのムーア法則のペースは鈍化しつつある。Maxwellは、本来20nmプロセスだったはずが、半導体技術のトレンドの変化のために、28nmプロセスでのスタートを余儀なくされた。ただし、Maxwellで最大のハイエンドGPUは20nmプロセス世代になるだろう。

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