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

NVIDIA新世代GPU「Maxwell」のSMアーキテクチャ

MaxwellでSMアーキテクチャを大きく変革したNVIDIA

 NVIDIAの新GPUマイクロアーキテクチャ「Maxwell(マクスウェル)」のポイントは効率性にある。NVIDIAは、Maxwellでは従来のKepler(ケプラ)アーキテクチャよりも、演算ユニットの稼働率を高めたと言う。そのために、NVIDIAはMaxwellでは、GPUのプロセッサ単位であるSM(Streaming Multiprocessor)の構成と命令スケジューリングを変えた。

 MaxwellのSMは4つのブロックに分割されており、個々のブロックがそれぞれ命令ユニットと実行ユニットを備える。1個のブロックの中に、CUDAコア(積和演算ユニット)の32ユニットバンドルと、スーパーファンクションユニット(SFU:Super Function Unit)が8ユニット相当、ロード/ストアユニットが8ユニット相当含まれる。

MaxwellのSMM
PDF版はこちら

 NVIDIA GPUは、32スレッドのバンドルであるWarp単位で命令を実行する。Maxwellの場合は、CUDAコアユニットは32演算ユニットを備えるため、1個のWarpを1サイクルで実行できる。それに対して、SFUとロード/ストアは、32スレッドのWarpを4サイクルスループットで実行する。SFUとロード/ストアがx8となっているのは、実行スループットを示している。以前の記事で1ユニットと記述していたのは間違いだ。また、命令種類によっては、スループットがより低い(8サイクルなど)場合もあるが、基本は4サイクルだ。

 Maxwellでは、これらのユニットが64KBのレジスタファイルを共有する。命令スケジューラ、コンピュート実行ユニット群、レジスタファイルで1セットになっている。命令スケジューリングは、2つのクラスタで共有するテクスチャユニット以外は、1個のクラスタの枠内で行なわれるためシンプルだ。下はMaxwellアーキテクチャでの命令スケジューリングの想定図だ。

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

 命令ユニットは、毎サイクルに、多数のWarpのプールから、リソースが準備完了したWarpを1つ選び、プログラムカウンタを参照してWarpの命令ストリームから命令を拾う。その時に、1個のWarpから最大2命令を毎サイクルにディスパッチできる。

 一方、実行ユニットでは、CUDAコアは1サイクルスループットで1個のWarpの命令を実行できる。そのため、命令ユニットは毎サイクルCUDAコアに命令を発行できる。それに対して、SFUとロード/ストアユニットは、4サイクルスループットで1個のWarpの命令を実行する。つまり、1命令をSFUまたはロード/ストアユニットに発行すると、4サイクルの間は次の命令を発行できない。Maxwellでは、このようにSMの中の限定されたブロックで命令発行を行なう。テクスチャユニットに対しては、ペアとなるもう1つのブロックの命令ユニットと調停して命令発行を行なうと見られる。しかし、それ以外は、命令ユニットはブロックの枠内で命令を制御するため、比較的シンプルだ。

実際にはwarpスケジューラとペアリングされているリソース

 Keplerの場合はSMの中に含まれる192個のCUDAコアは、16ユニットのバンドルのベクタユニットとして構成されている。合計で12個のx16 CUDAコアバンドルが配置されている。命令ユニットは4ユニットで、実際にはCUDAコア群とレジスタを4分割して制御している。この点は、Maxwellと似ているが、Keplerではより自由に命令発行ができる仕組みになっているという。その分、SMの複雑度は高い。

KeplerのSMX
PDF版はこちら

 Keplerでは、CUDAコアは16スレッド並列の構成なので、32スレッドのWarpの実行は2サイクルレイテンシとなる。スーパーファンクションユニット(SFU)もWarpの命令スループットは最低2サイクル。ロード/ストアユニットも2サイクルだ。

 それに対して、命令ユニットは各サイクルに2命令を発行できる。そのため、あるユニットに対しては奇数サイクルに命令を発行し、別なユニットには偶数サイクルに発行するといったように命令発行のサイクルがずれる。SMを2つに分けて交互に命令発行するのではなく、各ユニットに個別のタイミングで命令を発行する仕組みになっているという。そのため、Maxwellと比べると命令発行はずっと複雑となる。下はKeplerアーキテクチャでの命令発行の想定図だ。

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

命令発行性能と命令実行性能のバランス

 こうしたSMの構造の違いを見た上で、どれだけの数の命令を各サイクル毎に発行と実行できるかを比較すると、MaxwellとKepler両アーキテクチャの違いが明瞭に見えてくる。

 KeplerとMaxwellは、どちらもSMトータルでの命令発行数は、各サイクルに最大8命令だ。それぞれの命令は32スレッドのWarpに対して実行されるので、スレッド単位で見た場合は8×32命令となる。つまり、32スレッドのWarpに対する命令を、ピークで8個並列に発行できる、言ってみれば8Warp命令の発行性能だ。命令の発行レートについては、KeplerとMaxwellで基本の仕組みに変わりがない。

KeplerとMaxwellの命令発行
PDF版はこちら

 Keplerでは命令発行と、ちょうどマッチする数の実行パイプを命令実行側が揃えている。Keplerでは、CUDAコア(積和演算ユニット)の16ユニットのバンドルのベクタユニットを合計12ユニット備えている。それぞれのユニットは2サイクルスループットで、32スレッドのWarpの命令を実行する。

 そのため、命令実行のスループットで見ると各16ユニットバンドルは0.5Warp命令/サイクルとなる。スペシャルファンクションユニット(SFU)もWarpの命令スループットは最低2サイクル。ロード/ストアユニットも2サイクルだ。Keplerの場合は全てのコンピュート実行ユニットが、最高で0.5Warp命令/サイクルの命令実行スループットとなる。下の図はKeplerのSM内での命令発行と命令実行の関係を図式化したものだ。

KeplerとのSM内での命令発行と命令実行
PDF版はこちら

 KeplerのSM内には、0.5Warp命令/サイクルのユニットが合計で16ユニットあることになる。各ユニットの命令実行スループットを合計すると、0.5Warp命令/サイクル×16ユニット=8Warp命令/サイクルの実行スループットとなる。Keplerの場合は、命令ユニット側の命令発行性能と、実行ユニット側の命令実行性能が同数で一致している。

 つまり、Keplerでは、うまく命令をスケジューリングできれば、全ての実行ユニットに対してピッタリと命令を発行できることになる。命令ユニットもムダがなくキレイに収まる。言い換えれば、命令ユニットと実行ユニットの両方を、フルにムダなく動かすという思想で作られている。実際には、テクスチャユニットとそのデータパスもあり、それもコンピュート時に使うことができるので、実行ユニット数はより多いが、基本のコンピュートユニットに限ると上の図のようになる。

 ちなみに、CPUの場合は命令ユニットの命令発行数よりも、実行ユニットの命令実行スループットの方が多いのが普通だ。始めから、実行ユニットをフルに稼働させることはできないことを前提として設計されている。それに対して、GPUは一般的に実行ユニットの稼働率をCPUより高く保つことを前提とした設計になっている。

命令発行に偏ったMaxwellアーキテクチャ

 Keplerでは命令発行/実行の比率は1対1だった。それに対して、Maxwellは命令発行についての思想が異なる。Maxwellも、命令発行のスループットは最大で8Warp命令/サイクルで、Keplerと同じだ。しかし、実行ユニットは、各4分の1クラスタに32 CUDAコアをバンドルしたベクタユニットが1ユニットと、スペシャルファンクションユニット(SFU)とロード/ストアユニットで構成されている。

Maxwellの命令発行と命令実行
PDF版はこちら

 Maxwellの場合、CUDAコアのバンドルは32演算ユニットなので、1個のWarpの命令を最短で1サイクルスループットで実行できる。1Warp命令/サイクルのスループットだ。それに対して、SFUとロード/ストアは、どちらも1個のWarpの命令を実行するスループットは最短で4サイクルだ。図上で「x8」としているのは、4サイクルスループットであるためで、0.25Warp命令/サイクルのスループット換算となる。そのため、4分の1クラスタ内での合計では、命令実行スループットは最高1.5Warp命令/サイクルとなる。それに対して、命令発行は4分の1クラスタにつき最高2Warp命令/サイクルなので、命令ユニットの側が過剰となる。

 SM全体で見ると、Maxwellは最大で8Warp命令/サイクルの命令発行能力を持っているのに、命令実行スループットはコンピュート系だけなら最大で6Warp命令/サイクルとなる。MaxwellもKepler同様にテクスチャユニットを持つが、SM内のテクスチャユニットはKeplerの方が2倍多い。4テクセル/サイクルのフィルタリングスループットを備えるユニットが、Maxwellは2ユニットで、2つのクラスタで共有している。それに対してKeplerは4ユニット備えている。そのため、グラフィックスだけのワークロードを考えた場合も、Keplerの方が命令発行に対する命令実行の比率が高い。

 MaxwellとKeplerの命令発行と実行を比較すると下の図のようになる。上がMaxwellで下がKeplerだ。このように、単純に命令発行と命令実行の比率だけを見ると、MaxwellとKeplerでは大きな違いがある。

KeplerとMaxwellの命令発行と命令実行
PDF版はこちら

GPUの物理設計の問題は配線密度

 Maxwellの命令スケジューリングに関する設計思想は、命令発行にゆとりを持たせれば、命令実行ユニットをより高効率に稼働できるというものだ。その結果、命令発行の能力の方が、命令実行を上回るアーキテクチャになった。命令発行側が少ないのが当たり前のCPUとはかけ離れた設計思想だ。だが、その選択によって、MaxwellではKeplerより演算コアの稼働率を高めることができた。

 また、SMアーキテクチャの改革は、GPUが物理設計で抱える問題と密接に関連している。NVIDIAは、2009年11月の半導体カンファレンス「IEDM」で、GPUの物理設計の問題点がインターコネクトにあると説明した。下のチャートはIEDMの論文にあった、各プロセス世代のGPUの、単位面積当たりのメタル配線の長さと、配線レイヤー間のビア(Via)の数だ。GPUは配線地獄であり、それがどんどん悪化していることがわかる。特に、冗長性がなく歩留まりに影響するシングルビアの数が40nmプロセス以降は増えている。現在の28nmプロセスはさらに悪化しているはずで、歩留まりが悪化する可能性がそれだけ高まっていることになる。

GPUの配線の増加

 膨大な数の演算ユニットをレジスタやメモリなどのリソースや命令ユニットなどの制御リソースと接続しなければならないGPUでは、配線が最もクリティカルな問題だ。そのため、GPU設計では、論理的な構成をシンプルに工夫して、物理的な配線を減らしたい。そのためには、GPUをできるだけシンプルな単位で設計した方がいい。

 その点で、Keplerはやや複雑に寄りすぎているように見える。Maxwellアーキテクチャでは、SM内の4つのブロックは、命令発行については、その枠内で完結するアーキテクチャとなっている。そのため、より多くのリソースを繋げなければならないKeplerより配線はシンプルとなるはずだ。また、メモリ階層もKeplerよりMaxwellの方がシンプルで整理された構造となっている。

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

 今回、Maxwellでは16-wayではなく32-wayのCUDAコアの構成を採った。これも簡素化のためだとNVIDIAは説明する。実際、CUDAコアに対する命令発行が1サイクルスループットになると、Keplerの時のようなCUDAコア間での命令発行サイクルがずれるといった問題は発生しなくなる。

 効率化することで、物理的なSMのダイエリアを縮小したことも、MaxwellのSMアーキテクチャの重要なポイントだ。その結果、Kepler世代のメインストリームGPUが2個のSM構成だったのを、Maxwell世代では5個のSMにまで拡張できた。

KeplerとMaxwellの命令発行
PDF版はこちら
NVIDIA GPUとAMD GPUの比較行
PDF版はこちら

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