後藤弘茂のWeekly海外ニュース
革新アーキテクチャ「Pascal」はNVIDIA GPUのマイルストーンに
~HBM2/NVLinkなど「Tesla P100」から見えたこと
(2016/4/6 20:53)
GTCでジェンスン・フアンCEOがPascalを大々的に発表
NVIDIAが主催するGPUコンピューティングカンファレンス「GPU Technology Conference(GTC)」で、同社は次世代GPUアーキテクチャ「Pascal(パスカル)」ベースのGPUを正式に発表した。今回発表されたのはHPC(High Performance Computing)/サーバー向けのハイエンドGPU「Tesla P100(GP100)」。前世代のMaxwell(マクスウェル)は下位のGPUから発表されたが、今回のPascalは最上位GPUから導入される。
GTCの基調講演で、NVIDIAのジェンスン・フアンCEOは、Pascalの5つの技術ポイントを強調した。
- Pascalアーキテクチャ
- 16nm FinFET 3Dトランジスタプロセス
- シリコンインタポーザを使ったHBM2メモリ技術
- プロセッサ間接続のNVLink
- 新しいAIアルゴリズム
最後のAIアルゴリズムは、GPU側のアーキテクチャ拡張の結果によって実現されるものなので、Pascal自体の技術革新は4点だ。後述するが、じつはPascalの重要な特徴は、最初のGPUのマイクロアーキテクチャの刷新だ。これまでとは方向性を変えて、GPUの実効性能を上げる方向へとマイクロアーキテクチャが大幅に拡張された。
2番目のプロセス技術の革新も重要だ。従来の28nmプレーナトランジスタプロセスから、16nm FinFET 3Dトランジスタプロセスになったことで、リーク電流(Leakage)が大幅に抑制され、電力効率が上がったからだ。HBM2メモリは、720GB/sec(近い将来には1TB/secの)超広帯域を実現する。
さらに、NVLinkは、GPU間を40GB/secのリンクでダイレクト接続することで、GPUの拡張性を劇的に向上させる。GP100はNVLinkを4リンク備えるため、8 GPUまでを2ホップで接続することができる。これまでは、2GPU構成が一般的な最大規模のノードだったのが、Pascalでは8GPU構成にまで拡張される。
このように、Pascalでは、GPU自体の性能を上げるだけでなく、マルチGPU構成を容易にすることで、マルチGPUによるコンピュートノード当たりの性能を劇的に引き上げることができる。ちなみに、IBMとOpenPOWERのPowerアーキテクチャCPUもNVLinkをサポートするため、NVLink GPUをCPUに直結することもできる。
こうして列挙すると、今回のPascalが、NVIDIA GPUにとって技術的に非常に大きなジャンプであることが見えてくる。プロセス技術、マイクロアーキテクチャ、メモリとパッケージング、インターコネクト技術と、全てに渡って抜本的な技術革新がもたらされている。漸進的な拡張だったMaxwellとは大きく異なり、その前のKeplerの革新よりもインパクトがはるかに大きい。
NVIDIA GPUにとってマイルストーンとなる革新アーキテクチャがPascalだ。また、今後の10nm世代と見られるVolta(ボルタ)などのGPUは、このPascalの延長線になると推測される。その意味では、今後数世代のNVIDIA GPUの礎となるGPUと言えそうだ。
FinFETプロセスによって動作周波数と性能を引き上げる
Pascalは、NVIDIAにとってFinFETプロセスの最初の外付けGPUだ。プロセスノードの数字が16であることから、製造元がTSMCであることが分かる。トランジスタがリーク電流(Leakage)の少ないFinFETになったことで、電力当たりの性能が上がった。実際に、動作周波数はベースがMaxwellベースのTeslaの948MHzに対して、PascalベースTeslaでは1,328MHzと大きく引き上げられている。これは、電力を低減できたことで、周波数向上の余地が産まれたためだ。
また、プロセスが微細化したことで、ダイ当たりのトランジスタ数は、前世代のMaxwellの最大構成のGM200の8B(80億トランジスタ)から15.3B(153億)へと1.91倍にほぼ倍増した。ダイサイズ(半導体本体の面積)はほぼ同じ610平方mm(GM200は601平方mm)なので、トランジスタ密度が1.88倍になった。動作周波数が上がり、トランジスタ数が増えたことで演算性能も増えた。前世代のTesla M40(GM200)と比較すると、単精度(32-bit)浮動小数点演算性能は、7TFLOPSから10.6TFLOPSへと1.5倍に上がった。
しかし、Pascalアーキテクチャの特徴は、こうした従来のGPUのFLOPS競争以外の部分にある。Pascalでは、単純に単精度(32-bit:FP32)性能を引き上げるだけではなく、メモリ帯域、レジスタ数とインフライトスレッド数、倍精度(64-bit:FP64)と半精度(16-bit:FP16)の浮動小数点演算性能を大幅に引き上げた点にある。一言で言えば、これまでのGPUの性能競争とは異なるスペックが、Pascalでは強化されている。
FP32のピーク性能以外の部分を大きく拡張
Pascalでは前世代Maxwellに対して、メモリ帯域は3倍の720GB/secに、レジスタ数とスレッド数は2倍にシェアードメモリ量は1.3倍に、倍精度(FP64)性能は25倍に、半精度(FP16)性能は3倍の21.1TFLOPSになった。FP16の20TFLOPS越えも驚異的だが、FP64も一気に5.3TFLOPSになり実用的な性能になった。
また、Pascalでは、CPUとのメモリ共有のユニファイド仮想メモリの仕組みを改善(GPUの仮想メモリ空間を拡張しページフォルトをサポート、ページサイズをCPUに合わせた)、プリエンプティブなコンテクストスイッチ機能を実装し、GPU間の広帯域インターコネクトを備えたことも特徴だ。GPU間をダイレクトに接続するNVLinkによって、GPU間帯域は5倍に、ダイレクト接続できるGPUは8個となった。制約が強かったGPUのスケーラビリティが大幅に向上した。
一言で言えば、マーケティング的にインパクトがあるFP32 FLOPS数の倍増にはこだわらず、プロセッサとしての実効性能の引き上げに注力したのがPascalアーキテクチャだ。プロセスの微細化とトランジスタ数の倍増を考えれば、NVIDIAはPascal世代で単精度(FP32)演算ユニットを倍増させて15TFLOPSのGPUを作ることもできた。しかし、NVIDIAは単精度ユニットは抑えて、GPUを効率的に稼働させる機能の充実に増えたリソースを割いた。そのため、Pascalは見かけのスペック以上に、実効性能が高いプロセッサになると見られる。
具体的には、メモリ帯域の拡張でメモリストールが減るだけでなく、インフライトスレッド数の増大でメモリレイテンシの隠蔽が厚くなり、その点でもGPUの稼働率が上がる。パックドFP16(半精度)演算の導入によってFP16時の効率が向上し、GPU間のデータ交換の効率も上がる。過去数世代のGPUで問題だった、GPUの実効性能の問題が大幅に軽減される。FP16とFP64の性能は、両精度を必要とするアプリケーションの性能を飛躍させる。その中には、FP16の利用がトレンドとなってるディープラーニングも含まれる。
そうした意味では、PascalはGPUユーザーのニーズに応えた設計と言えそうだ。もっとも、実際にはGPUもダークシリコン問題に苦しんでおり、単純に演算ユニットを増やしても同時稼働させることはできず、無駄になってしまう。そう考えると、妥当な設計チョイスだ。
60個のSMを配置した巨大なGPU構成
Tesla P100(GP100)の全体構成は下の図のようになっている。GPU全体で合計60個のSM(Streaming Multiprocessor)が配置されている。製品SKUとしては、60個のSMのうち4個が無効にされて56個のSM構成で出荷される。これは、610平方mmの大型ダイの場合は、ダイ上に欠陥があって不良のコアが発生する確率が高いためだ。不良のSMを無効にする冗長性を持たせることで、製品の歩留まりを上げることができる。
メモリコントローラは図では合計8ユニット。2ユニットずつが1個のHBM2モジュールに接続される。各メモリコントローラが512-bit幅のメモリをコントロールする。実際には、HBM2は1モジュールで8チャネル/16スードチャネルであるため、メモリインターフェイスはチャネル当たり128-bit、スードチャネルなら64-bitとなる。そのため、個々のメモリコントローラは、4チャネル/8スードチャネルをコントロールしなければならない。従来の構成なら、1メモリコントローラが2チャネルなので、メモリコントローラが比率的に足りないように見える。
オフチップのプロセッサ間インターコネクトのNVLinkは、図の下に配置されている。GP100は4リンク構成となっており、最大4個のGPUまたはCPUとダイレクトにコネクトできる。
中央に描かれているのはL2キャッシュで、これもMaxwellの3MBから4MBへと増やされている。L2は、実際にはメモリコントローラに近接して配置されていると見られる。図の上に描かれているのはPCI Express gen3インターコネクトと、GPU全体のスレッド発行を統括するスレッドエンジンだ。
60個のSMは、10個ずつバインドされて「GPC(Graphics Processing Cluster)」を構成している。GPCは、言ってみればGPUの中のミニGPUで、GPUの実行パイプのほとんどを含む。GPCはGPU全体で6個となる。Pascal GP100のGPCの数は、実はMaxell GM200と同じだ。しかし、SMの数はGM200の24個に対して、GP100は60個(有効化されるのは56個)と大幅に増えている。これは、個々のSMの構成が小さくなったためだ。
SMの構成をMaxwellの半分に変更
MaxellとPascalは、SMの構成が異なる。中核となるCUDAコア(FP32浮動小数点演算プロセッサ)については、Maxellが各SMにつき128個であるのに、Pascalは64個となっている。Pascalでは、1個のSMが大きく2つのブロックに分割され、それぞれにWarpスケジューラとデュアル命令発行ユニットがある。2つのプロセッシングブロックは、それぞれ個別のWarpバッチを実行し、演算ユニット群とロード/ストアユニット、レジスタもユニットに分かれている。
しかし、テクスチャユニットと、テクスチャ/L1リードオンリキャッシュとシェアードメモリは2プロセッシングブロックで共有される。ちなみに、SM当たり64 FP32ユニットの構成は、AMDのGCN(Graphics Core Next)アーキテクチャのCU(Compute Unit)と同じだが、内部の構成は大きく異なっている。
SMの構成をMaxwellと比較すると、MaxwellではSMは4つのプロセッシングブロックで構成されていた。Pascal同様に個々のユニットが個別に命令ユニットと演算ユニット、レジスタを持つ構造だ。PascalのSMの設計は、このMaxell SMを2つに分割するところからスタートしたという。2プロセッシングブロックずつ2個のSMに分割、半分の演算ユニット数になったSMに共有リソースをそれぞれ割り当てた。
その上で、Pascalでは、個々のプロセッシングブロックのリソースを大幅に強化した。詳細は後でレポートするが、レジスタはMaxwellでは各ブロック64KB(32-bitレジスタ×16,384)だった。それが、Pascalでは倍の128KB(32-bitレジスタ×32,768)となっている。これは、GPUの演算コアの稼働効率に大きく影響する拡張だ。
ブロック当たりのインフライトで立ち上げるスレッド数が2倍に
GPUでは、通常のCPUのように、スレッド当たりのレジスタ数の割り当ては固定されていない。ドライバのコンパイラがスレッドに、物理的なレジスタ数を割り当てる。NVIDIA GPUのスレッド当たりの最大レジスタ数は現在は255だ。しかし、GPUが備える物理的なレジスタ数は決まっているため、スレッド当たりのレジスタ数と、立ち上げることができるスレッド数にはトレードオフが生じる。立ち上げるスレッド数が増えれば、1スレッドが使えるレジスタ数が減る。
NVIDIA GPUでは、32スレッドずつ束ねたスレッドバッチ「Warp」を、ベクタプロセッサとしての実行単位としている。NVIDIA GPUではプロセッサクラスタであるSMごとに、Warpを制御している。SMの中で、何個までのWarpを立ち上げられるかは、GPUアーキテクチャ世代によって異なる。レジスタリソースが少ないと、レジスタの割り当ての制約「レジスタプレッシャ(Register Pressure)」となり、立ち上げられるWarpが減って、ストールが生じてしまう。
Pascalでは、レジスタリソースを2倍に増やした。そのため、同じレジスタ割り当ての場合、ブロックごとに立ち上げることができるスレッド数/Warp数が倍増している。Maxwellでは、4ブロックで構成するSM全体で立ち上げることができる最大Warp数は64でスレッド数は2,048だった。それに対して、半分の2ブロックで構成するPascalのSMでも、立ち上げることができる数は64Warpで2,048スレッドとなっている。ブロック当たりのスレッド数/Warp数は2倍になっている。
GPUは、膨大なスレッドの並列化によってメモリレイテンシを隠蔽している。Pascalでは、メモリ帯域を3倍に引き上げたことで、競合によるメモリレイテンシの増大を抑えている。その上で、さらにインフライトのスレッド数を倍増させることで、レイテンシの隠蔽を容易にしている。結果として、Pascalアーキテクチャでは、SMの稼働率が非常に向上することが予想される。
PascalのSMは、レジスタ/スレッド回り以外も大きく拡張されている。その辺りは次回の記事でレポートしたい。