オススメ機能
Twitter
お気に入り
記事履歴
ランキング
4Gamer.net
お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
QRコードでLINEの4Gamer
アカウントを友達登録すると
月〜金の週5回,21時に厳選
ニュースをお届けします!
※購読にはLINEアプリが必要です
[GTC 2017]西川善司の3DGE:Volta世代のGPU「GV100」は,これまでと大きく異なるプロセッサだ――いったい何が?
特集記事一覧
注目のレビュー
注目のムービー
印刷2017/05/13 00:00

連載

[GTC 2017]西川善司の3DGE:Volta世代のGPU「GV100」は,これまでと大きく異なるプロセッサだ――いったい何が?

 NVIDIAは,GTC 2017の会期3日めとなる北米時間2017年5月10日に開催された基調講演で,最新アーキテクチャ「Volta」(ヴォルタ)世代のGPU「GV100」ベースの数値演算アクセラレータ「Tesla V100」を発表した。

基調講演でNVIDIAのJensen Huang氏が,GV100搭載のTesla V100を掲げた(関連記事
Volta(開発コードネーム)

Volta(開発コードネーム)
 基調講演の後には,「Inside Volta」(Voltaの内部)という,そのままなタイトルのセッションがあり,アーキテクチャのより深い話を聞くことができたので,今回はその内容をレポートすることにしたい。

 ちなみに登壇者は,いつものJonah Alben氏ではなく,エンジニアであるOlivier Giroux氏とLuke Durant氏の2名。スライドの内容に合わせて,両氏が代わるがわる解説するというスタイルになっていた。

Olivier Giroux氏(Principal Architect, NVIDIA)
Luke Durant氏(Principal Engineer, CUDA Software, NVIDIA)


GV100より大きいプロセッサはもう作れない!?


 TSMCの12nmプロセス技術,より正確を期すと,NVIDIA専用の12nm FinFETプロセス技術「12nm FFN」(FFN:FinFET NVIDIA custom)を用いて製造されるGV100は,総トランジスタ数約210億,ダイサイズ815mm2となっており,1チップのプロセッサとして世界最大サイズとなる。
 基調講演でNVIDIAのJensen Huang CEOは「これ以上大きいプロセッサはもう作れないんだ」と述べて聴衆の笑いをとっていたが,実はこの発言,ジョークではなく本当のことなのだ。

 プロセッサの製造にあたっては,プロセッサ内部の回路パターンの描かれた「原画」(※レチクル/reticle,光学機器の焦点面に付ける網線や十字線)にレーザー光を照射して,シリコンウェハー上に回路を焼き付けていく工程がある。この工程を行うのが半導体露光装置というものなのだが,「地球上に現存する最新最先端の露光装置が一括で露光できる最大限界のサイズ」で作られたのが,GV100だというのである。
 スティッチングとも呼ばれる二重露光技術を使えば大きなチップを露光することも不可能ではないが,その場合,微妙なずれでも歩留まりに影響するため,最先端プロセス採用時――12nmプロセス技術を採用するのはNVIDIAにとってVoltaが初だ――にやることはない。

 最新半導体露光装置の縦横アスペクト比は1:1.27くらい。そして,Tesla V100モジュールに載っているGPUダイもそれくらいのアスペクト比になっているので,それから見積もると,ダイサイズはおよそ25〜26×32〜33mm程度になると見られる。恐ろしく巨大だ(笑)。

Inside Voltaで公開となったTesla V100モジュール。こうして見ると,ダイの巨大さが分かる
Volta(開発コードネーム)

 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時の半分なのは「いつもどおり」だ。

Tesla V100搭載のPCI Expressカードモデル。こちらは1スロット仕様で,TDP 150Wというスペックだそうだ。補助電源コネクタは8ピン×1となっていた。GPGPU専用カードなので映像出力はない
Volta(開発コードネーム) Volta(開発コードネーム)


GV100のアーキテクチャ


 続いて全体ブロック図を見てみよう。

GV100のブロック図
Volta(開発コードネーム)

参考として,GP100のブロック図
Volta(開発コードネーム)
 GV100で,CPUで言うところの「コア」に値するミニGPUクラスタ「Graphics Processor Cluster」(以下,GPC)は6基構成。これはGP100から変わっていない。
 しかし,GPCあたりの演算コアクラスタである「Streaming Multiprocessor」(以下,SM)は,GP100の10基に対してGV100では14基に増加している。
 GV100でSMあたりのFP32演算器は64基,FP64演算器は32基で,この数自体はGP100と同じ。ただ,GP100だとSMが2ブロック構成なのに対し,GV100ではこれが4ブロック構成になっているのだ。SMあたりのFP32およびFP64演算器の数は変わっていないものの,NVIDIAはパーティショニングの仕方を変えてきているのである。

やはり参考として,GP100のSMブロック図
Volta(開発コードネーム)
 下に示したのは4ブロック構成となったSMのブロック図だが,これを見ると,ブロックごとにWarpスケジューラ(Warp Scheduler)と命令発行ユニット(Dispatch Unit),そして8基のロード/ストアユニット(LD/ST)があると分かる。つまり,SMあたりの総演算器数は従来と同じだが,発行できる(≒処理に取りかかれる)スレッド数はGP100に対して2倍になっているわけだ。
 CPUで言うところのサイマルテイニアスマルチスレッディング(Simultaneous multithreading,以下 SMT)的に,NVIDIAはGV100で,1クロックで同時に仕掛けられるデータスレッド数を2倍にして,データの読み出しや演算結果出力用のロード/ストアユニット数はブロックあたり8基を維持して,SMあたりでは2倍としているのである。

SMのブロック図。Warpスケジューラと命令発行ユニットにはわざわざ丸括弧付きで「32 thread/clk」と付記がある点に注目してほしい。NVIDIA製GPUでは32個のデータスレッドを束ねた「Warp」が実行単位となるが,このブロック図は,それをSM内の4ブロックでそれぞれ発行できることを示している
Volta(開発コードネーム)

 同時に仕掛けられるデータスレッド数が2倍になったとはいえ,SMあたりのレジスタファイル総容量は,GV100でもGP100から変わらず256KB(※GV100だと16384×32×4)だ。ここは気になるポイントと言えるだろう。ただ,GP100もGV100も,もっといえばさらに前のGK110でも仕様上の最大アクティブスレッド数は2048だ。「2048のアクティブスレッドに対するレジスタファイルの大きさは256KBでバランスする」という,CUDA仕様上の設計思想から,このスペックは決まっているのだろう。

GV100におけるSMあたりの最大アクティブスレッド数は2048まで。これはKepler時代から変わらない構成である
Volta(開発コードネーム)

 ただし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とかいった構成が可能になっているという。

GP100(左)とGV100(右)とでキャッシュメモリ周りを比較したスライド。GV100では容量128KBの「L1キャッシュ&Shared Memory」となった。GPUアプリケーションのようなShared Memoryをあまり使わないケースでは,128KB全部をL1キャッシュとして利用できる
Volta(開発コードネーム)
GV100では,Shared Memoryを大きくして使うことも可能。その場合の最大容量は96KBで,GP100の64KBよりも大きく取れる
Volta(開発コードネーム)

 一方で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倍

といった感じになる()。

※Texture Processing Clusters

 なお,GPCの数が6基で,GPCあたりのSM数が14基なので,計算すると,

  • 64(CUDA Core)×14(SM)×6(GPC)=5376

となって,5120基というGV100のCUDA Core総数とはズレが生じるが,これは歩留まり向上のため,4基のSMを無効化しているためである。こういう仕様は,大規模な新型GPUの市場投入時にはよくあることだ。


Voltaで新搭載? 謎の「Tensor Core」とは何か


Volta(開発コードネーム)
 前段であえて説明せず,後回しにしてきたが,Voltaアーキテクチャにおける最大の特徴は,新たに「Tensor Core」(テンサーコア)と呼ばれる演算ユニットの搭載してきたことにある。
 Tensorは,日本の学術界だと「テンソル」という読み仮名を充てることが多いが,NVIDIA Japanは「英語読みと同じく,テンサーとする」としているので本稿でもそれに倣った次第だ。ただ本稿において数学的な概念を示す場合は,より一般的なテンソルというカタカナを使うので,その点はご注意を。

 というわけでTensor Coreだが,これはいったい,何をするためのものなのだろうか。「テンソルとは何か」といった概念的な話は今回省略し,GV100のTensor Coreでどんな計算を行えるのかを説明することにしたい。

 さて,スカラ値の積和算は,「A×B+C」といったシンプルな計算式で表すことができるわけだが,行列同士の積和算となると,かなり複雑になる。とくに行列の積算は計算量が大きいのだ。
 下に示した図は,4×4の行列同士の積算を分かりやすく,各行列の各要素の「どこ」と「どこ」を掛け合わせているか表したものだ。基本的に,計算自体はスカラの積算と加算の組み合わせによるものというのが分かるだろう。

4×4行列の積算を図解したもの(※拡大画像は縦2840ドットとなりますので,従量課金環境下で開くときは注意してください)
Volta(開発コードネーム)

 行列の加算は,2つの4×4行列において対応する各要素を加算するシンプルなものとなるため,図解は省略するが,要は,このような最大で4×4の行列同士の積和算を計算するのが,Tensor Coreの仕事ということである。

Tensor Coreが行う計算のイメージ
Volta(開発コードネーム)

 こうした行列計算は畳み込み演算や座標変換に有効で,機械学習型AIはもちろんのこと,CG用途にも有用である。もっとも,行列の各要素は16bit半精度浮動小数点(FP16)であることが前提だそうなので,主な用途は機械学習用ということになるとは思う。

行列の各要素はFP16。ただし,積算でビットあふれが起きないようにする工夫はなされているとのことだ
Volta(開発コードネーム)

先に示したSMのブロック図より,ブロック1つを抜き出して再掲。64個のマスからなる「TENSOR CORE」が2つある
Volta(開発コードネーム)
 前段で示したSMのブロック図を見ると,Tensor Coreのマスはブロックあたり128個,より正確には64個のまとまりが2つあるのだが,NVIDIA側の説明だと,SMあたりのTensor Coreは8基となっている。なので64個のマスがまとまって1基のTensor Coreという数え方になっているのだろう。
 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と呼ぶことにしたのだそうだ。

Tensor Coreは,4×4要素行列同士の計算を,NVIDIA製GPUにおけるデータスレッドの仕組みであるWarpの範疇で発行する
Volta(開発コードネーム)

 実際の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あたりということになる。

Tesla V100の大枠スペックまとめ
Volta(開発コードネーム)

 今回の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を搭載するかどうかは,今からとても気になるところだ。

CUDAの算術ライブラリ「cuBLAS」で,正方行列同士の積算(GEMM:GEneral Matrix-matrix Multiplication)における性能を,GP100とGV100で比較したグラフ。要素精度がFP32のとき,GV100は1.8倍,FP16では9.3倍の性能を叩き出している。GP100はCUDA 8上で動作し,計算はベクトル計算に展開してから行われるのに対し,GV100はTensor Coreを利用できるCUDA 9上で動作し,計算は行列計算に展開して行っているという違いがある点を押さえておきたい
Volta(開発コードネーム)

 GV100搭載製品の登場時期は2017年第3四半期の見込みとなっている。

GV100搭載のTesla V100が4枚差してあるGPUワークステーション「DGX Station」。背面を確認するとディスプレイ出力端子があったので,ブースの説明員に聞いたところ,4枚のうち,最下段のTesla V100は,グラフィックスカードとしても動作するとのことだった
Volta(開発コードネーム) Volta(開発コードネーム)

GTC公式Webサイト(英語)

Inside Volta: The World’s Most Advanced Data Center GPU(英語)

  • 関連タイトル:

    Volta(開発コードネーム)

  • この記事のURL:
line
4Gamer.net最新情報
トピックス
スペシャルコンテンツ
注目記事ランキング
集計:06月21日〜06月22日