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

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

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

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

LINEで4Gamerアカウントを登録
[GTC 2016]西川善司の3DGE:Teslaとして登場した新世代GPU「Pascal」,その詳細に迫る
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2016/04/08 00:00

連載

[GTC 2016]西川善司の3DGE:Teslaとして登場した新世代GPU「Pascal」,その詳細に迫る

 NVIDIAが,同社主催のGPU関連学術会議「GPU Technology Conference 2016」(以下,GTC 2016)で,「Pascal」(パスカル)世代初となるGPU「Tesla P100」を発表した。その概要は2016年4月6日掲載の速報記事でお伝えしたとおりだが,NVIDIAは発表の後,Pascalに関する技術解説セッション「Inside Pascal」を実施したので,本稿ではその内容を中心に,Pascalのアーキテクチャと,第1弾となるTesla P100なるプロセッサがどのようなGPUなのかを解説していきたい。

Tesla P100の製品イメージ


明らかになったTesla P100「GP100」の基本仕様


 Tesla P100が採用するGPUコアの開発コードネームは,「GP100」。これは発表時点において明らかではなかった情報だ。また,ブロック図も以下のとおり公開されている。

GP100のブロック図。“ミニGPU”としてのGraphics Processor Cluster(GPC)としては6基構成となる。詳細は後段で
GeForce GTX 10

 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の演算性能が得られるのだ。

GP100がサポートするデータ表現型の仕様
GeForce GTX 10
FP16は符号1bit,指数5bit,仮数10bitの16bit構成。上のスライドにある「s5.10」はまさにこのことを示している。ちなみに「s」は「sign」(符合)の意味
GeForce GTX 10

 FP16は何に有効なのかというと,「8bitでは精度不足。しかし32bitでは品質過剰」というような,多様な計測デジタルデータの表現だ。具体的な例としてはハイダイナミックレンジ対応画像におけるピクセルデータや,各種センサーからの取得データなどが挙げられるだろう。
 そして,そうしたデータは機械学習(Machine Learning)用途で多用される。だからこそ,基調講演でNVIDIAの総帥たるJen-Hsun Huang(ジェンスン・フアン)氏は「GP100は機械学習に最適なGPUである」と訴求していたというわけなのだ。

Pascal(Tesla P100)とMaxwell(Tesla M40),Kepler(Tesla K40)の性能比較表。MaxwellとKeplerでは半精度浮動小数点演算性能(※スライド中「Half Precision Tflop/s」)の値が「NA」となっているが,これは単精度浮動小数点演算性能(※同「Single Precision Tflop/s」)と変わらないためである
GeForce GTX 10


GP100におけるSMは「Maxwellの半分となったCUDA Core数+演算支援リソース強化」仕様に


 GP100では,Maxwellで新しくなったSMの構成が再び新しくなった。結論からいえば,Maxwell時代だと,32基のCUDA Coreをひとかたまりとして,それにスケジューラやロード/ストアユニット,SFUとセットになったパーティションを構成し,そのパーティションを4基束ねたような格好だったのに対し,Pascal世代のGP100では,パーティションの数を半分の2基にしたうえで,パーティションごとの演算支援リソースを強化した格好になっている。

Maxwell世代の「GM100」におけるSM(左)と,GP100におけるSM(右)の比較。Pascalでパーティションの数は半減した一方,Maxwell世代にはなかったFP64対応CUDA Core(※図中「DP Unit」)が復活しているのが,ぱっと見ての違いだ。SMあたりのFP64対応CUDA Core数は32基,GPU全体では1792基となる
GeForce GTX 10 GeForce GTX 10

 Jen-Hsun Huang氏が発表時に強調していたとおり,GP100ではパーティションあたりのレジスタファイル(Register File)容量がMaxwell世代比で2倍となっている。Maxwell世代では1パーティション(=32 CUDA Core)あたりのレジスタファイルが1万6384個だったのに対し,Pascal世代では1パーティションあたり3万2768個だ。

「Maxwell世代のSMを半分に切って,それらを1つのSMにした」というのが,PascalにおけるSMのイメージ
GeForce GTX 10
GeForce GTX 10
 これは何を意味するのか。
 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技術を採用している。

GP100ダイの断面写真。左上のところにHBM2モジュールが見える
GeForce GTX 10

 総グラフィックスメモリ容量は16GB,総メモリバス帯域幅は720GB/sだ。積層メモリはSamsung Electronics製となる。

 前述のとおり,公式スペックとして明らかになっているGP100の総トランジスタ数は1500億。GP100 GPU単体だと153億で,Maxwell世代で最大規模だったGM200の80億と比べて2倍近い規模なのだが,そんなGPU単体が総トランジスタ数の10%強しかなく,残り90%弱がHBM2モジュールだというのはなかなか衝撃的である。

GTC 2016展示会場のSK HynixブースにあったHBM2モジュール
GeForce GTX 10
 メモリバス幅は4096bitと発表されているので,720GB/sの帯域幅を実現するためのデータレートは1.366Gbpsが必要だ。なので,メモリの実クロックは683MHz前後ということになる。
 一説によれば,搭載する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側のローカルメモリ側にコピーバックするような仕様だったのだ。

Kepler〜Maxwell世代における「CPUとGPUで共通してアクセスできるメモリ空間」の管理&制御方式
GeForce GTX 10

CUDA 8は2016年6月の公開予定
GeForce GTX 10
 これが,Pascalに対応した「CUDA 8」――2016年6月公開予定――からは,Pascal世代GPUの仮想アドレスが48(+1)bit化されたことを受け,CPU側(=ホストシステム)に搭載されているメインメモリ容量サイズまでを確保して利用できるようになる。
 しかも,上で示した「毎度のコピーバック」が不要になる。つまり,GPU側のローカルメモリとCPU側のメインメモリとで,ページサイズ単位ながらも分散して存在できるようになるのだ。

こちらが,Pascal世代における「CPUとGPUで共通してアクセスできるメモリ空間」の管理&制御方式
GeForce GTX 10

 メインメモリ側にあるデータをGPU側からアクセスするケースが生じたら,そのときやっとGPUローカルメモリ側へのコピーバックが発生する。その後は,CPU側がこのアドレス空間にアクセスしようとしない限り,CPUのメインメモリ側にコピーバックが行われることはない。
 つまり,PascalとCUDA 8の組み合わせでは,CPUとGPUとで共通のメモリ空間をアクセスするにあたっての無駄な往来コピーが必要最低限になり,性能向上を期待できるようになるいうことである。


PCIeを圧倒する,GP100のプロセッサ間バス「NVLink」


Tesla P100の底面イメージ。接続インタフェースはNVLink対応となる
GeForce GTX 10
 NVIDIA製GPU間をつなぐ独自インタフェース「NVLink」が標準搭載となるのも,GP100における目玉の1つだ。

 GP100が搭載するNVLinkは4リンク仕様のものとなっており,別のGPUなど,4つの接続ポイントとつながることができる。
 帯域幅は1リンクあたり双方向40GB/s。4リンクを合計すると双方向160GB/sであり,PCI Express(以下,PCIe) Gen.3の16レーンと比べて5倍の性能だ。

NVLinkはプロセッサ間通信用の独自リンクだ。いまやボトルネックになり得るPCIeの代替案として実装された新要素である
GeForce GTX 10

 Inside Pascalでは,NVLinkの具体的な接続形態が2つ紹介された。
 1つは4つあるNVLinkの接続リンクでGPU間をつなぎ,もう1つをPCIeハブに接続するというものだ。
 これは,従来からあるPCIeベースのPCシステムにGP100システムを組み込むのに適した構成だが,データ伝送のピーク帯域幅はPCIeのそれで制限されるという弱点も抱えることになる。

CPUがNVLink非対応のシステムにGP100を接続した構図。いわゆる現行のスタンダードなPCシステムに組み込む場合はこうなるということでもある
GeForce GTX 10

 なお,Tesla P100を8基搭載するスーパーコンピュータとして同時に発表となった「DGX-1」は,CPUとしてIntelのXeonプロセッサを2基搭載しているので,まさにこの接続形態を採用しているはずだ。おそらく,GP100ベースのPCIeカードがリリースされた場合も,このような接続になるはずである。

DGX-1の構成図。Tesla P100を実装する大きな基板が,2基のXeonを搭載する基板とつながる仕様になっている
GeForce GTX 10

 もう1つは,CPUそのものがNVLinkに対応しているケースだ。
 この場合は,CPUとGPUとの間でNVLinkによるデータ伝送が可能となるため,CPUとGPUとの通信においてもNVLinkのフルスペックを活用できる。ただし,この接続形態をIntelが採用する可能性は低い。IBMがNVLink対応のPower系プロセッサ投入を計画しているので,現実的にはそちらで採用される構成ということになるだろう。

NVIDIAが考える理想のNVLink接続システムがこちら。CPUまでもがNVLink対応!
GeForce GTX 10


従来製品との性能差も明らかに


NVIDIAが示した「Tesla P100の圧倒的な性能」。メモリバス帯域幅は3倍という主張だが,これは小数点以下を切り上げたものという理解でいい
GeForce GTX 10
 そのほか,Tesla P100とTesla M40,Tesla K40のスペック比較はのとおりだ。

 ざっくりまとめると,Tesla M40比で単精度浮動小数点演算性能は約1.77倍,FP64対応CUDA Coreを持つGPU同士の比較ということで倍精度浮動小数点演算性能を見ても対Tesla K40で約3.16倍という数字になっている。メモリバス帯域幅は約2.5倍だ。

※1 オンパッケージのHBM2を入れると1500億
※Tesla P100はNVLinkの最大値,Tesla M40とTesla K40はPCIe Gen.3 x16のもの

 各種ベンチマークの数値も公開された。
 下に示したスライドのグラフは,左端の「Caffe/Alexnet」(※画像認識分類システムの学習負荷テスト)のみ,Tesla P100×8とTesla M40×2の比較で,それ以外のテストではTesla P100×4とTesla P100×2もグラフに姿を見せている。また,比較対象はTesla K80×2となる。
 縦軸は,Haswell世代のIntel製CPU×2による性能値を1倍として正規化したものだ。

 グラフのテスト項目はさまざまだが,重要なのは,Tesla K80×2に対して,Tesla P100×2がおおむね1.2〜2.5倍程度の性能差を示しているところと,Tesla P100の数が増えるにしたがって,GPUとGPUをつなぐNVLinkの効果により,性能向上率が上がっていくところである。

Tesla P100の性能をアピールするグラフ
GeForce GTX 10


さて,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のバリエーション展開をすることに必然性を感じない

GTC 2016のタイミングでは,GeForceどころか,PCIe接続版Pascalの情報すら出てきていない
GeForce GTX 10
という理由から,筆者は「GP100はグラフィックスレンダリング機能を持つ」と睨んでいる。
 しばらく,GP100ベースのGeForceは出てこないだろうが,歩留まりが安定してきたころに,GP100か,その後継のGPUコアをベースとしたTITANブランドの製品が出てくる可能性はあるだろう。

 ただ,おそらくはその前に,PascalベースのGeForce第1弾として,GK104やGM204の後継となる,中規模のGPUコアを市場投入してくると思われる。

NVIDIAの開発者向けblogポスト「Inside Pascal」

  • 関連タイトル:

    GeForce GTX 10

  • 関連タイトル:

    Quadro & Tesla

  • この記事のURL:
4Gamer.net最新情報
プラットフォーム別新着記事
総合新着記事
企画記事
トピックス
スペシャルコンテンツ
注目記事ランキング
集計:01月20日〜01月21日