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

倍精度浮動小数点演算性能を引き上げた新GPUアーキテクチャ「Pascal」

メインストリームGPUも発売されるPascalアーキテクチャGPU

GTCの会場となったSan Jose McEnery Convention Center

 NVIDIAは、同社が主催するGPUコンピューティングカンファレンス「GPU Technology Conference(GTC)」で、次世代ハイエンドGPU「Tesla P100(GP100)」を発表した。次世代GPUアーキテクチャ「Pascal(パスカル)」ベースのGPUコンピューティング向け製品だ。前回のレポートで説明したように、Pascalは、GPUマイクロアーキテクチャ、プロセス技術、メモリ&パッケージ技術、プロセッサ間インターコネクトの全ての面で技術的に飛躍した画期的なGPUとなっている。基調講演では、PC向けのメインストリーム向けと見られるPascalベースGPUもチラ見せされ、Pascalアーキテクチャが幅広いGPUラインナップで投入されることも示唆された。

技術刷新が重なったPascal世代
Tesla P100
GDDR5版と見られるメインストリーム向けPascalを搭載したボードをちらりと見せるNVIDIAのJen-Hsun Huang(ジェンスン・フアン)氏(Co-founder, President and CEO)
GTCで発表されたTesla P100のNVLinkボード

 PascalはGPU内部のマイクロアーキテクチャが、前世代の「Maxwell」から刷新されている。一言で言えば、GPUコンピューティング重視路線に戻ったマイクロアーキテクチャだ。NVIDIAのGPUコンピューティング戦略に、ブレがないことが明らかになったGPUだ。

 Maxwellは、ダイ面積当たりの単精度(FP32)浮動小数点演算性能を引き上げるために、倍精度(FP64)浮動小数点演算性能を思い切り削った。どちらかと言えば、PCグラフィックスやモバイルに寄ったマイクロアーキテクチャとなっていた。おそらく、当初はNVIDIAは、GPUコンピューティング市場ではその前の世代のKeplerを継続し、グラフィックス市場をMaxwell主導へと並列させるつもりだったと推測される。しかし、計算精度の要求が低いディープラーニングの勃興で、MaxwellもGPUコンピューティング市場に投入したことで、NVIDIAの戦略がやや分かりにくくなっていた。

 MaxwellでFP64を犠牲にしてFP32を強化したのは、同じ28nmプロセスノードで、性能をアップさせなければならない、という制約があったからだ。トランジスタが縮小しないため、何かを犠牲にしない限り、FP32の性能を伸ばすことができなかった。しかし、16nm FinFETプロセスに移行したPascalでは、使うことができるトランジスタ数が大幅に増えるため、そうした制約がない。そこで、NVIDIAは、Pascalではマイクロアーキテクチャを刷新し、FP64性能をFP32の2分の1のバランスに一気に引き上げた。

KeplerからMaxwellまでは同じ28nmプロセスノード
PDF版はこちら

 Maxwell世代の「Tesla M40(GM200)」と比較すると、Pascal Tesla P100のFP64性能は25倍にもなる。KeplerベースのTesla K40(GK110)と比較しても3倍の性能だ。Pascalは、HPC(High Performance Computing)用途にも十分に耐えられるマイクロアーキテクチャとなっている。言い換えれば、NVIDIAにとっては3年半振りの、本格的なHPC向けTeslaの更新となる。

FP32に対してFP16のピーク性能は2倍、FP64のピーク性能は2分の1

共通点も多いMaxwellとPascalのSM(Streaming Multiprocessor)

 NVIDIA GPUは、コンピュート系のユニットをSM(Streaming Multiprocessor)と呼ばれるクラスタにまとめている。Maxwell以降は、SMはさらにプロセッシングブロック(Processing Block)に分割されている。プロセッシングブロックは、warpスケジューリングと命令発行、レジスタを共有するブロックで、CPU的にはコアに当たる。warpはNVIDIA用語での論理ベクタを示し、32エレメントで構成される。従来のGPU用語で言えば、分岐グラニュラリティがwarpだ。warpはSIMD(Single Instruction, Multiple Data)型実行されるがプレディケーションで見かけ上各レーンを分岐させることができるため、NVIDIAはSIMT(Single Instruction, Multiple Thread)と呼んでいる。warpの32スロットの命令ストリームもスレッドと呼ばれており、1warpが32スレッドの構成となる。

Pascal SMのブロック図
PDF版はこちら

 MaxwellとPascalのマイクロアーキテクチャには共通性も強い。どちらも、1つのプロセッシングブロックの中に32個のFP32 CUDAコアと、8個のロード/ストアユニット、8個のスーパーファンクションユニット(Special Function Unit:SFU)、2命令発行の命令ユニット、レジスタを含む。FP32 CUDAコアは単精度(FP32)浮動小数点演算演算ユニット、SFUは超越関数などを実行するユニット、ロード/ストアはメモリからのデータの読み出し/書き込みを制御する。

 ただし、GPU SMの構成は、PascalとMaxwellで大きく異なる。Pascal SMは、Maxwell SMを半分に切ったような構造となっている。Maxwell SMは、プロセッシングブロックが4つで、FP32 CUDAコアが合計128個の構成だった。それに対して、Pascal SMは、プロセッシングブロックが2つで、FP32 CUDAコアが合計64個の構成となっている。

Maxwell SMのブロック図
PDF版はこちら
Maxwell SMの構成
Pascal SMの構成
3世代のアーキテクチャのSMのスペック比較

Maxwell SMを分割したPascal SM

 Maxwell SMでは、4個のプロセッシングブロックで96KBのシェアードメモリと命令キャッシュを共有する仕組みだった。それに対して、Pascal SMでは粒度が下がり、2個のプロセッシングブロックで64KBのシェアードメモリと命令キャッシュを共有している。一言で言えば、リソースの共有の比率が減り、個々のプロセッシングブロックが、より多くの共有リソースと共有リソースの帯域を使えるようになった。プロセッシングブロック当たりのシェアードメモリの量はMaxwellが24KBに対してPascalが32KBだ。シェアードメモリ帯域は2倍になっている。MaxwellからPascalで、メモリ階層自体はあまり変わっていない。

Maxwell SMの構成
Pascal SMの構成
PascalとMaxwellのメモリ階層
PDF版はこちら

 PascalとMaxwellとも、各プロセッシングブロックの命令発行は2命令/サイクルで2命令は同じwarpから発行される。前回の記事で説明したように、PascalはMaxwellより、インフライトで立ち上げることができるwarp数は倍増しており、その分、より多くの命令を充填することができる。それに対応して、レジスタファイルもMaxwellより倍増されている。

 ちなみに、このブロック図はGPUコンピューティングについてのブロック図であり、グラフィックスでは多少表現が異なる可能性がある。Maxwellでは、SM毎にジオメトリ演算の固定機能ユニットが付属していた。頂点フェッチやテッセレータ、ビューポイントトランスフォームなどだ。しかし、PascalではSMが2個のプロセッシングユニット構成になるため、個々のSM毎にジオメトリユニットが付くとバランスが崩れる。おそらく、Pascalのグラフィックス時の構成では、2個のSM毎にジオメトリユニット群が付属して「Texture/Processor Cluster (TPC)」クラスタを構成すると推測される。下が推測図だ。

PascalのTexture/Processor Cluster (TPC)の推定図
PDF版はこちら
スペック表にもPascalのTPCは2SM構成で記されている

各ブロック毎に16ユニット相当のFP64性能

 PascalのSMでは、演算ユニットが大幅に強化された。Maxwellでは、FP64はSM当たり4命令/サイクル、つまり、1つのプロセッシングブロック当たり1ユニット相当のFP64性能だった。FP32に対してFP64性能は32分の1だった。それに対して、Pascalでは、FP64はFP32の2分の1の性能へとジャンプアップした。そのため、NVIDIAの公式のブロック図でも、FP64 CUDAコアが図上で明記された。

 実際には、FP64とFP32は部分的にリソースは共有すると見られる。FP64は32スレッドのwarp命令を2サイクルに1命令発行となるため、warp命令を1命令/サイクルのFP32の半分のスループットとなる。そのため、下の図では、便宜的に、Pascal SMブロックでは16個のFP64 CUDAコアとして描いている。同様に、MaxwellはSM全体でFP64は4スレッド/サイクルであるため、便宜上、Maxwell SMブロック図上では各1個のFP64 ユニットとして描いている。

左がPascalのプロセッシングブロック、右がMaxwellのプロセッシングブロック
PDF版はこちら

 また、Pascalでは、パックドFP16がサポートされた。従来は半精度(FP16)浮動小数点演算は、FP32 CUDAコアで実行され、FP32と同じスループットだった。Maxwell世代なら、1プロセッシングブロック当たり、FP32とFP16ともに、32エレメント/サイクルだった。しかし、Pascalでは、2-wayのSIMD(Single Instruction, Multiple Data)型のFP16がサポートされた。そのため、32個のCUDAコアで、各サイクル32エレメントのFP16演算が可能となっている。

パックドFP16
PDF版はこちら

 ただし、このFP16は、SIMD型のパックド(SIMD)演算であるため、FP32やFP64のように、それぞれのエレメントに対する命令が異なる方向に分岐した場合に、見かけ上分岐したように処理するプレディケーションは行なうことができない。ある程度使い方が限定される。しかし、FP16を多用するディープラーニングの場合、分岐しないため、パックドFP16を有効に使うことができる。パックドFP16は、NVIDIAのモバイルSoC「Tegra X1」のMaxwellコアで最初に採用されている。

MaxwellのTeslaに対してPascalではFP16性能が3倍に

ディープラーニングを意識した2-way SIMD型のFP16フォーマットの導入

 パックドFP16の導入によって、PascalのFP16の性能は激増した。Tesla P100のスペックではFP16は21.2TFLOPS。Maxwell Tesla M40の7TFLOPSに対して3倍だ。FP32性能は、Maxwellに対して、Pascal Tesla P100は10.6TFLOPSと1.5倍にしか上がっていないため、NVIDIAはマーケティング的にはFP16の性能を前面に押し出している。しかし、多くのHPCカスタマーはKepler Tesla K40であるため、PascalでFP32の性能もKeplerの4.3TFLOPSから2.47倍に上がる。

3世代のTeslaの性能比較

 浮動小数点は、符号部、指数部、仮数部の3部フォーマットからなる。IEEE 754規格では、FP32は「s8.23」の符号部1-bit/指数部 8-bit/仮数部 23-bitのフォーマットだ。それに対してFP16は「s5.10」の符号部1-bit/指数部 5-bit/仮数部 10-bitとなる。ダイナミックレンジは2の40乗。さらに非正規化数(subnormal number)のハードウェアサポートもある。これがソフトウェア処理となると、性能が大幅に落ちるケースが出る。

 FP16は、GPUにとって新しくて古いフォーマットだ。グラフィックスで、整数から浮動小数点に移行する際に、データ量を抑えるためにFP16が導入され、盛んに使われた。グラフィックスでは現在も使われているが、同じくデータ量を抑える目的でディープラーニングにも採用が進んだことから、急に脚光を浴びている。FP16性能は、GPUアーキテクチャの新しい焦点となっている。NVIDIAがPascal(パスカル)をディープラーニングに向けて作ったと主張する根拠の大きな部分は、このFP16のサポートにある。

 マイクロアーキテクチャが一新されたPascalだが、それ以上に変わったのは、メモリとパッケージング、そしてインターコネクトだ。Tesla P100は、通常のPCI Expressボードではなく、NVLinkボードで提供される。メモリはスタックドのHBM2だ。そして、このHBM2が、Pascalの強力な武器であると同時に泣き所となっている。量産を立ち上げたばかりのHBM2の供給が、Tesla P100の需要に追いつかないためだ。次回は、Pascalのインターフェイス回りをレポートしたい。

Pascal Tesla P100(GP100)のHBM2メモリ

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