連載
[GTC 2017]西川善司の3DGE:Volta世代のGPU「GV100」は,これまでと大きく異なるプロセッサだ――いったい何が?
ちなみに登壇者は,いつものJonah Alben氏ではなく,エンジニアであるOlivier Giroux氏とLuke Durant氏の2名。スライドの内容に合わせて,両氏が代わるがわる解説するというスタイルになっていた。
Olivier Giroux氏(Principal Architect, NVIDIA) |
Luke Durant氏(Principal Engineer, CUDA Software, NVIDIA) |
GV100より大きいプロセッサはもう作れない!?
基調講演でNVIDIAのJensen Huang CEOは「これ以上大きいプロセッサはもう作れないんだ」と述べて聴衆の笑いをとっていたが,実はこの発言,ジョークではなく本当のことなのだ。
プロセッサの製造にあたっては,プロセッサ内部の回路パターンの描かれた「原画」(※レチクル/reticle,光学機器の焦点面に付ける網線や十字線)にレーザー光を照射して,シリコンウェハー上に回路を焼き付けていく工程がある。この工程を行うのが半導体露光装置というものなのだが,「地球上に現存する最新最先端の露光装置が一括で露光できる最大限界のサイズ」で作られたのが,GV100だというのである。
スティッチングとも呼ばれる二重露光技術を使えば大きなチップを露光することも不可能ではないが,その場合,微妙なずれでも歩留まりに影響するため,最先端プロセス採用時――12nmプロセス技術を採用するのはNVIDIAにとってVoltaが初だ――にやることはない。
最新半導体露光装置の縦横アスペクト比は1:1.27くらい。そして,Tesla V100モジュールに載っているGPUダイもそれくらいのアスペクト比になっているので,それから見積もると,ダイサイズはおよそ25〜26
NVIDIAのGPUは,単位シェーダプロセッサを「CUDA Core」と呼んでいるが,GV100におけるその総数は5120基。Pascal世代の従来モデルとなる「GP100」が3584基だったので,GV100はGP100に対してCUDA Core数の約43%増量を果たしたGPUということになる。
32bit単精度浮動小数点演算(FP32)の理論性能値は15 TFLOPSと発表済み。ただ,公称スペックだとブーストクロックは1455MHzで,CUDA Coreは1基あたり1クロックで積和算をこなせる(=2 FLOPS)ことからすると,
- 1.455GHz
× 5120 CUDA Core × 2 FLOPS=14899 FLOPS
という計算式が成り立つため,より正確には14.9 TFLOPSということになるだろう。
ちなみに1455MHzというブーストクロックは,16nm FinFETプロセス技術を用いて製造されるGP100の同1480MHzと比べて若干低い。わざわざカスタムのプロセス技術を採用した割にクロックが上がっていないのは興味深いところだが,むしろ,先代比でダイサイズが約33%大きくなったビッグチップで,先代からほとんどクロックが落ちていないことを褒め称えるべきか。
気になるTDP(Thermal Design Power,熱設計消費電力)は300Wで,これはGP100から変わらず。絶対値としては大きいが,プロセッサの規模を考えると,なかなか頑張っていると言いたくはなる。
64bit倍精度浮動小数点演算(FP64)の理論性能値が7.5 TFLOPSで,FP32時の半分なのは「いつもどおり」だ。
GV100のアーキテクチャ
続いて全体ブロック図を見てみよう。
しかし,GPCあたりの演算コアクラスタである「Streaming Multiprocessor」(以下,SM)は,GP100の10基に対してGV100では14基に増加している。
GV100でSMあたりのFP32演算器は64基,FP64演算器は32基で,この数自体はGP100と同じ。ただ,GP100だとSMが2ブロック構成なのに対し,GV100ではこれが4ブロック構成になっているのだ。SMあたりのFP32およびFP64演算器の数は変わっていないものの,NVIDIAはパーティショニングの仕方を変えてきているのである。
CPUで言うところのサイマルテイニアスマルチスレッディング(Simultaneous multithreading,以下 SMT)的に,NVIDIAはGV100で,1クロックで同時に仕掛けられるデータスレッド数を2倍にして,データの読み出しや演算結果出力用のロード/ストアユニット数はブロックあたり8基を維持して,SMあたりでは2倍としているのである。
同時に仕掛けられるデータスレッド数が2倍になったとはいえ,SMあたりのレジスタファイル総容量は,GV100でもGP100から変わらず256KB(※GV100だと16384
ただしGV100の場合,,各データスレッド間で共有できる汎用データ領域L1キャッシュメモリと「Shared Memory」(共有メモリ)の周りは,GP100と比べてけっこう大きく変わっている。
振り返ってみると,GP100でL1キャッシュ容量は24KB,Shared Memoryの容量は64KBであった。ただ,大量のストリーミングデータに対して高度な演算処理を行っていくようなGPUアプリケーションだと,Shared Memoryはほとんど使われないこともあり,そうしたアプリケーションではL1キャッシュの容量が大きいほうが性能向上に結びつきやすい。
そこでGV100でNVIDIAは,L1キャッシュとShared Memoryを総容量128KBのキャッシュメモリとして統合。そのうえで,128KBの領域全部をL1キャッシュとして使うモードと,L1キャッシュを一定量に留めて残りをShared Memoryとして使い分けるモードを設け,柔軟にモード切り替えを行えるようにした。モード切替は専用命令により可能で,たとえばShared Memory 96KB,L1キャッシュ32KBとか,Shared MemoryとL1キャッシュをいずれも64KBとかいった構成が可能になっているという。
一方でL2キャッシュはシンプルに容量が増加となった。GP100の4MBに対してGV100では6MBと1.5倍になっている。
まとめると,
- GP100もGV100もGPCは6基構成
- GPCあたりのSM数はGP100が10基に対してGV100は14基
- SMあたりのCUDA Core数はGP100もGV100も64基。ただしSM内部構造はGV100で変更となり,同時発行可能なデータスレッド数はGP100の2倍
といった感じになる(表)。
なお,GPCの数が6基で,GPCあたりのSM数が14基なので,計算すると,
- 64(CUDA Core)
× 14(SM) × 6(GPC)=5376
となって,5120基というGV100のCUDA Core総数とはズレが生じるが,これは歩留まり向上のため,4基のSMを無効化しているためである。こういう仕様は,大規模な新型GPUの市場投入時にはよくあることだ。
Voltaで新搭載? 謎の「Tensor Core」とは何か
Tensorは,日本の学術界だと「テンソル」という読み仮名を充てることが多いが,NVIDIA Japanは「英語読みと同じく,テンサーとする」としているので本稿でもそれに倣った次第だ。ただ本稿において数学的な概念を示す場合は,より一般的なテンソルというカタカナを使うので,その点はご注意を。
というわけでTensor Coreだが,これはいったい,何をするためのものなのだろうか。「テンソルとは何か」といった概念的な話は今回省略し,GV100のTensor Coreでどんな計算を行えるのかを説明することにしたい。
さて,スカラ値の積和算は,「A×B+C」といったシンプルな計算式で表すことができるわけだが,行列同士の積和算となると,かなり複雑になる。とくに行列の積算は計算量が大きいのだ。
下に示した図は,4×4の行列同士の積算を分かりやすく,各行列の各要素の「どこ」と「どこ」を掛け合わせているか表したものだ。基本的に,計算自体はスカラの積算と加算の組み合わせによるものというのが分かるだろう。
行列の加算は,2つの4×4行列において対応する各要素を加算するシンプルなものとなるため,図解は省略するが,要は,このような最大で4×4の行列同士の積和算を計算するのが,Tensor Coreの仕事ということである。
こうした行列計算は畳み込み演算や座標変換に有効で,機械学習型AIはもちろんのこと,CG用途にも有用である。もっとも,行列の各要素は16bit半精度浮動小数点(FP16)であることが前提だそうなので,主な用途は機械学習用ということになるとは思う。
GPCあたりのSM数が14基であることと,歩留まり向上のため4基のSMが無効になっていることを踏まえると,総数は,
- 8(Tensor Core)
× 14(SM) × 6(GPC)−8(Tensor × 4(SM)=640基
先ほど示した図にもあるとおり,4×4要素の行列同士による積和算だと,計算量としては,4×4の16要素に対して4回の積和算(2 FLOPS)を行っていることになるので,
- 640基×1.455GHz×(16要素×4回×2 FLOPS)=119194G Tensor FLOPS
となり,約120T Tensor FLOPSとなって,公式スペックとの計算は合う。ちなみに,ディープラーニング業界ではこうした演算の性能指標をTOPS(Tensor OPS)で表すことが多いのだが,GV100ではすべて浮動小数点演算で処理するため,あえてTensor FLOPSと呼ぶことにしたのだそうだ。
実際のSM内では,2つの4×4行列の積和算を1 Warpとして発行し,処理することになるという。
このTensor Coreの利用は,NVIDIAのGPGPUプラットフォームである「CUDA」からということになる。もちろんTensor Coreは,これまでのNVIDIAのGPUにはなかった概念なので,当然,CUDAそのものがGV100の登場にあわせてバージョンアップする。具体的には,Volta世代GPUに対応したCUDAはバージョン9,つまりは「CUDA 9」となるわけだ。CUDA 9については稿をあらためてレポートすることにしたい。
Tensor Core搭載のGeForceは出るのか?
GV100のメモリはGP100から変わらずHBM2となる。メモリコントローラは512bit幅のものが8基あるので,総メモリバス幅は4096bitだが,このスペックもGP100から変わらない。容量も16GBで同じだ。
総メモリバス帯域幅は900GB/sで,GP100の同720GB/sから約25%向上している。このあたりはメモリチップの順当なスペック向上がもたらした性能といったところか。ちなみに900GB/sだと,メモリの実クロックは875MHzあたりということになる。
今回のGV100は,あくまでGPGPU向けのGPUということで,報道陣からの「グラフィックスプロセッサとして振る舞えるのか。振る舞えるとしたらその性能は?」という質問に対して,登壇したエンジニアの両名は,「現在はその質問に答えるタイミングではない」と答えるのみであった。
なお,NVIDIAの組み込み機器向けSoC(System-on-a-Chip),これまでの呼び方で言う,Tegra系プロセッサの最新版となる「Xavier」(エグゼイヴィア)でも,Tensor Coreが入ることがInside Voltaセッション中にはほのめかされている。もっともXavierは自動運転をはじめとしたコンピュータビジョンやAI用途を想定したSoCなので,その判断があったとしても驚きはない。
NVIDIAがこのTensor Coreに対して,かなり本気なのは分かるが,今後出てくるであろう,Volta世代のGeForceがTensor Coreを搭載するかどうかは,今からとても気になるところだ。
GV100搭載製品の登場時期は2017年第3四半期の見込みとなっている。
GTC公式Webサイト(英語)
Inside Volta: The World’s Most Advanced Data Center GPU(英語)
- 関連タイトル:
Volta(開発コードネーム)
- この記事のURL: