連載
[GTC 2016]西川善司の3DGE:Teslaとして登場した新世代GPU「Pascal」,その詳細に迫る
明らかになったTesla P100「GP100」の基本仕様
Tesla P100が採用するGPUコアの開発コードネームは,「GP100」。これは発表時点において明らかではなかった情報だ。また,ブロック図も以下のとおり公開されている。
GP100のトランジスタ総数は150億個で,各トランジスタの製造には,16nmプロセスルールの3DトランジスタことFinFETを採用している。チップ上には,「HBM2」(HBM:High Bandwidth Memory)技術に基づく積層メモリ(Stacked Memory)モジュールを4基搭載するが,それを含めると,トランジスタ総数は1500億個だ。
ブロック図中にある演算ユニット「Streaming Multiprocessor」(以下,SM)の総数は60基。ただしこのうち4基は歩留まり対策として無効化されるため,GP100としては56基仕様となる。過去の歴史に倣うなら,歩留まりが安定したら,フルスペックの60基モデルが登場する可能性もあるだろう。
シェーダプロセッサ「CUDA Core」の総数は3584基。Inside Pascal後のQ&Aセッションでは,「CUDA Coreの総数はいくつか」という質問が出たのだが,GPUアーキテクトの1人である上級副社長GPUエンジニアリング担当のJonah M.Alben(ジョナ・アルベン)氏は「3500……いくつだったかな。よく覚えてないから,あとで公開される仕様書で確認してくれ(笑)」と返していたほどで,もはや端数にはあまり関心がない様子なのが印象的だった。
演算性能は,倍精度浮動小数点(FP64)で5.3 TFLOPS,単精度浮動小数点(FP32)で10.6 TFLOPS。単精度浮動小数点演算性能を基準とする一般的な計算式に当てはめると,CUDA Coreは1基で2つの積和演算(2 OPs)をこなせることから,以下のとおり,動作クロックを算出できる。
- 10600(GFLOPS)÷(3584(CUDA Core)×2(OPs))
≒1.479(GHz)
NVIDIAはTesla P100の動作クロックについて,ベース1328MHz,ブースト1480MHzと明らかにしているが,実際,計算結果はブーストクロックと一致している。
GP100ではもう1つ,「ハーフ精度」とも呼ばれる半精度浮動小数点(FP16)演算性能の高さが,大きな目玉となっている(関連記事)。従来のNVIDIA製GPUだと,数値型としてのFP16は利用できたものの,GPU内部における取り扱いはFP32と同等だった。それに対してGP100では,FP32の演算器にFP16をペアで“押し込んで”一括計算できるため,シンプルに2倍,21.2 TFLOPSの演算性能が得られるのだ。
FP16は何に有効なのかというと,「8bitでは精度不足。しかし32bitでは品質過剰」というような,多様な計測デジタルデータの表現だ。具体的な例としてはハイダイナミックレンジ対応画像におけるピクセルデータや,各種センサーからの取得データなどが挙げられるだろう。
そして,そうしたデータは機械学習(Machine Learning)用途で多用される。だからこそ,基調講演でNVIDIAの総帥たるJen-Hsun Huang(ジェンスン・フアン)氏は「GP100は機械学習に最適なGPUである」と訴求していたというわけなのだ。
GP100におけるSMは「Maxwellの半分となったCUDA Core数+演算支援リソース強化」仕様に
GP100では,Maxwellで新しくなったSMの構成が再び新しくなった。結論からいえば,Maxwell時代だと,32基のCUDA Coreをひとかたまりとして,それにスケジューラやロード/ストアユニット,SFUとセットになったパーティションを構成し,そのパーティションを4基束ねたような格好だったのに対し,Pascal世代のGP100では,パーティションの数を半分の2基にしたうえで,パーティションごとの演算支援リソースを強化した格好になっている。
Jen-Hsun Huang氏が発表時に強調していたとおり,GP100ではパーティションあたりのレジスタファイル(Register File)容量がMaxwell世代比で2倍となっている。Maxwell世代では1パーティション(=32 CUDA Core)あたりのレジスタファイルが1万6384個だったのに対し,Pascal世代では1パーティションあたり3万2768個だ。
NVIDIAのGPUでは,「Warp」と呼ばれるひとかたまりのスレッドが実行単位となっていることを知っている人は多いだろう。1 Warpは32個のデータスレッドになるわけだが,イメージしやすいグラフィックス処理を例に説明すると,「処理すべきピクセル32個をひとかたまりのWarpとして扱う」感じである。ある演算命令を実行するときには,この32個ひとかたまりのピクセル群に対して並列に実行を適用するわけである。
WarpというデータスレッドがSMに突っ込まれると,SM内ではCUDA Coreを動員して演算を行うのだが,そのとき,演算に関連するデータの読み書きはレジスタファイルを介して行う。また,メモリアクセスなどでWarpに対する処理がストール(停止)した場合には,別のWarpスレッドへの処理に切り換えて,当該Warpスレッドのストールを隠蔽しようとするのだが,そのとき,別のWarpスレッドを処理するのにもやはりレジスタファイルを消費する。
なので,レジスタファイルの容量が足りていないと,Warpスレッドの切り換え自体がうまく行えない。つまり,ストールの隠蔽に失敗する可能性がある。逆に言えば,レジスタファイルが多ければ安定的にWarpスレッドの切り換えを行えるようになり,ストールの隠蔽効率が上がり,ひいては性能が向上・改善する。
SM内あたりのレジスタファイル数は6万5536個(=256KB)で,Maxwell世代と変わらないが,パーティション単位,32基のCUDA Core単位では倍増させることで,ストールの隠蔽効率を上げ,性能向上を図ったというわけである。
またGP100では,共有メモリ(Shared Memory)の容量が,SMあたり64KBとなった。
Maxwell世代だと96KBだったので,3分の2に減ったと感じるかもしれないが,そうではない。MaxwellではSMあたりのCUDA Core数は128基なのに対し,PascalではSMあたり64基だ。なので「SMあたりのCUDA Core数対共有メモリ容量比」は33%増しなのである。これも,SM内で複数のWarp実行を仕掛けたときの効率向上に寄与するだろう。
かなりの拡張が入ったPascalのメモリシステム
本稿の序盤でも紹介したとおり,GP100では,メモリチップを4枚積み重ね,Through Silicon Via(TSV)技術で貫通接続配線させるHBM2技術を採用している。
総グラフィックスメモリ容量は16GB,総メモリバス帯域幅は720GB/sだ。積層メモリはSamsung Electronics製となる。
前述のとおり,公式スペックとして明らかになっているGP100の総トランジスタ数は1500億。GP100 GPU単体だと153億で,Maxwell世代で最大規模だったGM200の80億と比べて2倍近い規模なのだが,そんなGPU単体が総トランジスタ数の10%強しかなく,残り90%弱がHBM2モジュールだというのはなかなか衝撃的である。
一説によれば,搭載するHBM2モジュールのデータレートは2Gbpsだが,安全性を考えてクロックダウンさせているとのことだが,定かではない。ただ,GTC 2016の展示会場にあったSK Hynixのブースには2Gbps仕様のHBM2があったので,この説の信憑性は相応にあると言えそうである。
ちなみに,もしフルスペックが2Gbpsだとして,その速度で動作するなら,4096bitバスで帯域幅1TB/sの大台に乗ることになり,以前NVIDIAが予告していた数字と合う。
さて,GP100は,メモリシステムに関連したホットトピックも目立つ。
1つは,仮想アドレスが49bitまでサポートされるようになり,48bitある一般的なCPUメモリ空間のすべてを参照できるようになったこと。なお,余分の「+1」はGPU側のグラフィックスメモリ参照用指定bitである。もう1つは,ページフォルト制御が可能になったことだ。
これらに対しては,GPGPUプログラミングシーンから「革命的だ」と賞賛する声が多い。なぜかといえば,これら2つの新要素によって,GPGPUプログラミングの汎用性,透過性がより高まるからである。
NVIDIAのGPGPU開発プラットフォームであるCUDAは「CUDA 6」以降で,KeplerあるいはMaxwell世代から「CPUとGPUで共通してアクセスできるメモリ空間」を確保できるようになった。しかし,そのメモリ容量の最大サイズは,GPU側のローカルメモリサイズまでに制限される。
また,確保された「CPUとGPUで共通してアクセスできるメモリ空間」にCPUがアクセスするときは,GPU側にあるローカルメモリの内容をページサイズ分(※ページサイズは最大2MB単位)だけCPU側のメモリ(以下,メインメモリ)へコピーするようになっていた。その後,CPU側からのアクセスが終わったら,その都度,GPU側のローカルメモリ側にコピーバックするような仕様だったのだ。
しかも,上で示した「毎度のコピーバック」が不要になる。つまり,GPU側のローカルメモリとCPU側のメインメモリとで,ページサイズ単位ながらも分散して存在できるようになるのだ。
メインメモリ側にあるデータをGPU側からアクセスするケースが生じたら,そのときやっとGPUローカルメモリ側へのコピーバックが発生する。その後は,CPU側がこのアドレス空間にアクセスしようとしない限り,CPUのメインメモリ側にコピーバックが行われることはない。
つまり,PascalとCUDA 8の組み合わせでは,CPUとGPUとで共通のメモリ空間をアクセスするにあたっての無駄な往来コピーが必要最低限になり,性能向上を期待できるようになるいうことである。
PCIeを圧倒する,GP100のプロセッサ間バス「NVLink」
GP100が搭載するNVLinkは4リンク仕様のものとなっており,別のGPUなど,4つの接続ポイントとつながることができる。
帯域幅は1リンクあたり双方向40GB/s。4リンクを合計すると双方向160GB/sであり,PCI Express(以下,PCIe) Gen.3の16レーンと比べて5倍の性能だ。
Inside Pascalでは,NVLinkの具体的な接続形態が2つ紹介された。
1つは4つあるNVLinkの接続リンクでGPU間をつなぎ,もう1つをPCIeハブに接続するというものだ。
これは,従来からあるPCIeベースのPCシステムにGP100システムを組み込むのに適した構成だが,データ伝送のピーク帯域幅はPCIeのそれで制限されるという弱点も抱えることになる。
なお,Tesla P100を8基搭載するスーパーコンピュータとして同時に発表となった「DGX-1」は,CPUとしてIntelのXeonプロセッサを2基搭載しているので,まさにこの接続形態を採用しているはずだ。おそらく,GP100ベースのPCIeカードがリリースされた場合も,このような接続になるはずである。
もう1つは,CPUそのものがNVLinkに対応しているケースだ。
この場合は,CPUとGPUとの間でNVLinkによるデータ伝送が可能となるため,CPUとGPUとの通信においてもNVLinkのフルスペックを活用できる。ただし,この接続形態をIntelが採用する可能性は低い。IBMがNVLink対応のPower系プロセッサ投入を計画しているので,現実的にはそちらで採用される構成ということになるだろう。
従来製品との性能差も明らかに
ざっくりまとめると,Tesla M40比で単精度浮動小数点演算性能は約1.77倍,FP64対応CUDA Coreを持つGPU同士の比較ということで倍精度浮動小数点演算性能を見ても対Tesla K40で約3.16倍という数字になっている。メモリバス帯域幅は約2.5倍だ。
各種ベンチマークの数値も公開された。
下に示したスライドのグラフは,左端の「Caffe/Alexnet」(※画像認識分類システムの学習負荷テスト)のみ,Tesla P100
縦軸は,Haswell世代のIntel製CPU
グラフのテスト項目はさまざまだが,重要なのは,Tesla K80
さて,Pascal世代のGeForceは?
今回,詳しくは語られなかったが,Pascalでは,ついにGPUプリエンプション(GPU Pre-emption)に対応したことも明らかになった
このGPUプリエンプション機能は「実行終了までに時間のかかるGPUプログラムを動作させているときに別のGPUプログラムを実行する」「GPUプログラムのデバッグツールを実行する」「GPUを仮想化する」のに有効とのことだ。
要するに,AMDの「Async Compute」のような,GPU内の演算コアをGPGPU処理とグラフィックス描画に適宜振り分けての同時実行には対応せず,GPU全体のタイムシェアリングによるコンテクストスイッチングに対応するということである。
たとえば,グラフィックスレンダリング実行中にGPGPUプログラムを実行させた場合は,時分割でそれぞれを交互で動かすようなイメージの実行形態になる。現在のシングルCPUのマルチスレッド実行をイメージすると分かりやすいだろう。
なお,GTC 2016というイベントの特徴であるがゆえになのか,今回,PascalベースのGeForceに関する話は,皆無だった。
それもあって,一部には「GP100はグラフィックスレンダリング機能を持たない」と見ている人もいるようだが,
- GP100のブロック図にわざわざ「Texture Cache/L1 Cache」と並記してあり,テクスチャユニットもこれまでどおり,CUDA Core数に対して同じ比率で実装してある
- ラスタライザやジオメトリエンジンの搭載は,いまやGPU全体の規模からすると誤差のようなものなので,あえてこれらを排除してまで,GPUのバリエーション展開をすることに必然性を感じない
しばらく,GP100ベースのGeForceは出てこないだろうが,歩留まりが安定してきたころに,GP100か,その後継のGPUコアをベースとしたTITANブランドの製品が出てくる可能性はあるだろう。
ただ,おそらくはその前に,PascalベースのGeForce第1弾として,GK104やGM204の後継となる,中規模のGPUコアを市場投入してくると思われる。
NVIDIAの開発者向けblogポスト「Inside Pascal」
- 関連タイトル:
GeForce GTX 10
- 関連タイトル:
NVIDIA RTX,Quadro,Tesla
- この記事のURL:
キーワード
Copyright(C)2010 NVIDIA Corporation