後藤弘茂のWeekly海外ニュース
NVIDIAがグラフィックスに最適化したPascal「GeForce GTX 1080」を正式発表
(2016/5/18 12:03)
グラフィックス向けのフラッグシップGPU
NVIDIAは、“Pascal”アーキテクチャのグラフィックス向け製品「GeForce GTX 1080(GP104)」を正式にリリースした。Pascalを引用符で囲ったのは、GP104のマイクロアーキテクチャが、先に発表されたPascalアーキテクチャの「Tesla P100(GP100)」と大きく異なっているからだ。NVIDIAは、グラフィックス向けのGeForce GTX 1080(GP104)には、GP100とは異なるマイクロアーキテクチャを採用した。
一言で言えば、GeForce GTX 1080はデスクトップグラフィックスに最適化されたアーキテクチャとなっている。FP32(32-bit)単精度浮動小数点演算性能が高く、グラフィックス機能がMaxwell世代より大幅に強化され、電力やダイ当たりの効率が高い。その一方で、GP100で強化されたFP64(64-bit)やFP16(16-bit)浮動小数点演算性能は抑えられ、NVLinkやHBM2メモリといった特徴は導入されず、GP100の特徴である膨大なインフライトWarp数も継承されていない。アーキテクチャ的に見るならMaxwellの延長の色彩が強いのがGP104だ。先週の速報記事で予想したアーキテクチャとは大きく異なっていた。
NVIDIAのGPUは、GPUコンピューティング向けとハイエンドグラフィックスを兼ねた最上位のGPU(ダイサイズが500平方mm以上)、グラフィックス向けのハイエンドGPU(ダイ300平方mm台)、ミッドレンジGPU(ダイ200平方mm台)、メインストリーム以下のGPU(ダイ100平方mm台)と階層化されている。今回のGP104は、ダイが300平方mm台のハイエンドGPUだ。ハイパフォーマンスグラフィックス向けの主力となるGPUだ。
グラフィックスに最適化されたGeForce GTX 1080の性能は非常に高い。前世代のハイエンドGPU「GeForce GTX 980(GM204)」と比較すると性能は2倍近い。前世代のハイエンドGPU「GeForce GTX TITAN X(GM200)」と比べても、GeForce GTX 1080の方が上だ。グラフィックスで重要となるFP32性能で比較すると、GeForce GTX 1080は8.2TFLOPS(ベースクロック時)で、GeForce GTX 980の4.6TFLOPSの1.78倍。GeForce GTX TITAN Xの6.2TFLOPSの約1.4倍。前世代のハイエンドGPUを大幅に上回るハイエンドGPUは、かなり異例だ。しかも、バーチャルリアリティの描画では、GP104の新フィーチャである「Simultaneous Multi-Projection(サイマルテニアスマルチプロジェクション)」によって性能がさらにブーストされる。
性能が高い一因は動作周波数で、GeForce GTX 1080のベース周波数は1.6GHz、ブースト周波数は1.7GHz。対するGeForce GTX 980はベース1.1GHz、ブースト周波数は1.2GHz。GeForce GTX TITAN X(GM200)は1GHz/1.1GHz。TDP(Thermal Design Power:熱設計消費電力)はGeForce GTX 980(GM204)の165Wより少し増えて180Wとなった。
Maxwell世代のSMアーキテクチャを踏襲したGP104
NVIDIAは、GP100で、NVIDIA GPUの中核であるSM(Streaming Multiprocessor)の構造を変更した。前世代のMaxwellでは128個のFP32積和算ユニット(CUDAコア)を含んでいたSMを分割、SMあたり64個のCUDAコアのアーキテクチャへと変更した。
SMがWarpをコントロールする単位であり、GP100では、命令ユニット当たりのインフライトWarpを従来の2倍に増やすためにWarpの粒度を下げる必要があったためだ。GPUコンピューティングを主眼にしたGP100では、GPUの効率を引き上げるためにインフライトWarp数を引き上げた。NVIDIA GPUは、インフライトで制御できるWarp群の中から、実行できるWarpをピックして、同一のWarpの連続する命令から最大2命令を抽出して実行ユニットに対して発行する。そのため、インフライトWarp数を増やすことで、命令スケジューリングの効率を上げ、メモリレイテンシの隠蔽が容易になる。GPUコンピューティングでは、一部のアプリケーションで重要となる。しかし、グラフィックス用途を主眼としたGP104では、こうしたGP100のマイクロアーキテクチャは採用されなかった。
GeForce GTX 1080のSMマイクロアーキテクチャは、ほぼ前世代のMaxwellのSMマイクロアーキテクチャを継承している。GP104では、4個のプロセッシングブロックでSMを構成。対するGP100は2個のプロセッシングブロックでSMを構成する。SM全体で共有メモリと命令キャッシュ、ジオメトリパイプラインを共有する。
SM内の4個のプロセッシングブロックそれぞれに1個の命令ユニットがあり、32-wayのFP32浮動小数点演算ユニット「CUDAコア」と8-wayのロード/ストアユニット、8-wayのSpecial Function Unit(SFU)、2個のプロセッシングブロックで共有するテクスチャユニットに命令を発行する。CPU的な観点から見ると、4個のCPUコアがリソースを共有したブロックのようになっているのがGP104のSMだ。
SMが制御できるインフライトWarp数は、GP100とGP104ともに最大32で2,048スレッドだ。そのため、GP100ではプロセッシングブロックにつき32個程度のWarpからの命令を充填することができる。それに対してGP104は、プロセッシングブロックに付き16個程度のWarpでスケジュールすることになる。GP100の方が、スケジュールできるWarp数が倍で、その分、Warp命令スケジューリングの自由度が高く、メモリレイテンシも隠蔽しやすい。
インフライトWarp数は、レジスタファイルと共有メモリの量と結びつく。GP100のSMでは、命令ユニット当たりのレジスタファイルは128KB(32-bit Register×32,768)に増やされたが、GP104では命令ユニットに対するレジスタファイルは64KB(32-bit Register×16,384)とMaxwellと同様だ。共有メモリは、GP100では4個のプロセッシングブロックで共有で96KBだった。それに対してGP104では2個のプロセシングブロック共有で64KBとMaxwellと同様だ。
GP100ではFP64倍精度浮動小数点演算はプロセッシングブロック当たり16ユニット相当で、FP32の半分の性能だ。それに対してGP104では、FP64ユニットはプロセッシングブロック当たり1ユニット相当の性能で、FP32の32分の1だ。これもMaxwellと同じだ。GP100では、ディープラーニングで多用されるFP16半精度浮動小数点演算は、FP32ユニットで2-way SIMD(Single Instruction, Multiple Data)で実行される。そのため、FP16演算は、FP32の2倍の性能となっている。しかし、GP104では、これも実装されず、FP16の性能はMaxwell世代と同じく、FP32と同性能となる。
つまり、GP100マイクロアーキテクチャの焦点であるSMの分割とレジスタ&共有メモリ、FP64性能、パックドFP16などの特徴は、ことごとくGP104からは外されている。設計思想的にはMaxwell世代のSMで、NVIDIAはこれがグラフィックスには最適と判断したことが分かる。
プロセッサの設計が大きく異なるGP100とGP104
一言で言えば、GPUコアの実装を軽くして、ダイ面積あたりの演算性能を高めたのがGP104だ。GP100では14MB以上のレジスタファイルと3.5MBの共有メモリを搭載している。それに対してGP104ではレジスタが5.1MB、共有メモリが1.9MBに過ぎない。トラックしなければならないWarp数はGP100がGPU全体で3,584個に対して、GP104は1,280個。つまり、インフライトで制御するWarpとそのリソースには、GP100とGP104で大きな違いがある。
それに対してFP32演算ユニット数は、両チップでそれほど差が付かない。FP32ユニットはGP100の3,584ユニットに対して、GP104は2,560と71%の量。FP32のピーク演算性能はTesla P100の9.5TFLOPS(ベースクロック時)に対してGeForce GTX 1080が8.2TFLOPSで差は15%だけ。つまり、GP100に対してGP104は、インフライトWarp数は36%であるのに、FP32性能は85%と高い。
しかし、FP64とFP16になると、性能は大きく異なる。FP64については、Tesla P100が4.8TFLOPS(ベースクロック時)に対して、GeForce GTX 1080は257GFLOPSと5%に過ぎない。FP16はTesla P100が19TFLOPS(ベースクロック時)で、GeForce GTX 1080は8.2TFLOPSと43%。つまり、FP32演算性能を徹底して高め、インフライトWarp数やFP16性能の比率はMaxwell世代に止め、FP64性能は命令互換性を維持できる程度にしたのがGeForce GTX 1080だ。これが、プロセッサとして見るた場合のGP104のアーキテクチャの特徴だ。
結果として、GP104は極めてダイサイズ当たりのFP32性能の高いGPUとなっている。ダイサイズは、GP100の610平方mmに対して、GP104は314平方mmと51%に過ぎない。そのため、ダイ当たりのFP32性能は、Tesla版のGP100が15.6GFLOPS/平方mmであるのに対して、GP104は26.2GFLOPS/平方mmとなっている。同じプロセス世代なのに1.7倍もダイ当たりの性能が高い。TDP当たりなら、300WのGP100が31.7GFLOPS/Wであるのに対して、180WのGP104は45.7GFLOPS/Wと1.5倍近い。結論から言えば、GP104は、現在のデスクトップグラフィックスで重要なFP32に特化して、ダイと電力当たりの効率を追求したGPUとなる。
こうして見ると、NVIDIA GPUは、GPUコンピューティングに最適化したアーキテクチャと、グラフィックスに最適化したアーキテクチャの2方向に、ゆるやかに分化しつつあるように見える。
サイマルテニアスマルチプロジェクションのためにアーキテクチャを拡張
現在のNVIDIAのアーキテクチャでは、ジオメトリパイプラインやビューポートトランスフォームは各SM毎に実装されている。GP100はSMを細粒度にしたため、例外的に2個のSMでジオメトリユニット「PolyMorph Engine」を共有してTexture/Processor Cluster(TPC)を構成している。GP104では、SMとTPCは同一となっている。
GP104ではPolyMorph Engineの中の、ビューポートトランスフォームが刷新された。従来のアーキテクチャでは、1つのビューポートへのトランスフォームしかできなかったのが、最大16個のビューポートへのトランスフォームが可能になった。この「Simultaneous Multi-Projection(サイマルテニアスマルチプロジェクション)」は、GF104のグラフィックス機能の目玉で、GP100には実装されていない。
サイマルテニアスマルチプロジェクションと同じ機能は、シェーダ上でソフトウェア実装も可能だが、NVIDIAはビューポートトランスフォームハードウェアを拡張することで実現している。この機能はGP100側には実装されていないが、その理由は、GP100がGPUコンピューティング向けというだけでなく、開発時期の問題があったとJonah Alben氏(Senior Vice President, GPU Engineering, NVIDIA)は説明する。
実際、GP100は、最初のシリコンは1年も前にテープアウトしていたと言われる。そこから量産までに時間がかかったのがGP100だ。その間に、次の世代のGP104の設計が終了して、周回遅れから追いついた結果、GP104の方に新機能が盛り込まれることとなったと見られる。
FinFET化とクリティカルパス潰しで動作周波数を引き上げる
Maxwell世代のGeForce GTX 980と、Pascal世代のGeForce GTX 1080では、演算ユニット数以上に性能に差がついている。これはGeForce GTX 1080で、動作周波数を大幅に引き上げたからだ。28nmのGeForce GTX 980がベースクロック1.1GHz、ブーストクロック1.2GHzであったのに対して、16nmのGeForce GTX 1080はベース1.6GHz、ブースト1.7GHzに跳ね上がっている。1世代で1.4倍以上の動作クロックの上昇だ。さらに、GP104は2GHz越えまでのオーバークロックも可能だ。
もちろん、28nmプレーナトランジスタプロセスに対して、16nm 3D FinFETトランジスタプロセスでは、リーク電流もスイッチング電流もともに大幅に減る。電力面の効率が上がることで、動作周波数を引き上げることも容易になる。スイッチングも速くなる。しかし、半導体技術面の進歩だけでなく、後の記事で取り上げるが、GP104では、クリティカルパスを潰すことも加えて高クロック化を達成しているという。
この説明には、納得できる部分と矛盾する部分がある。納得できるのは、クリティカルパスの解明が進んでいるMaxwellアーキテクチャを継承することで、パス最適化がより短時間で済む点。矛盾するのは、FinFETプロセスではゲート幅の量子化によって、クリティカルパス潰しが従来よりきめ細かくすることが難しくなっていることだ。この話は、FinFET化によってセルライブラリなどが大幅に変わることとも関連してくる。
動作周波数の差は、GPUのプロセッサコア以外の部分の性能にも影響する。GP104とGM104では、FP32演算ユニットに対するテクスチャユニットの比率は同じ。GM204は128テクスチャユニットに対して、GP104は160ユニットと1.25倍にしか増えていない。しかし、テクスチャフィルレートは155.6GTexels/secに対して277.3GTexels/secと1.78倍に増えている。ちなみに、テクスチャフィルレートはメモリ帯域に縛られるため、ここ数年は伸びが鈍化していた。
ROP(Rendering Output Pipeline)ユニットの性能も動作周波数の向上の恩恵を受ける。GP104のROPはNVIDIA風の数え方で64ユニット。これは、GM204と同じだ。しかし、ROPのピクセル打ち込み能力は、GP104の方が1.4倍高い。メモリ帯域の向上とある程度リンクして、ROP性能も上がっている。
メモリコントローラは32-bit幅単位に細粒化
GPU全体の構造では、GeForce GTX 1080は4個のGPC(Graphics Processing Cluster)で構成されている。GPCはグラフィックスコアとしての機能をまとめたクラスタだ。GP104では、5個のSMで1個のGPCを構成する。GPCの内部のSMはラスタライザを共有する。NVIDIAアーキテクチャの場合、ジオメトリプロセッシングからピクセルプロセッングまでのパイプラインの間で、視点座標に変換するビューポートトランスフォーメーションは各SM内で行ない、ジオメトリをピクセルに変換するタスタライズはGPCで行なう仕組みとなっている。
メモリ回りでは、GM204とGP104は、どちらも256-bitのメモリインターフェイスを備える。高速DRAMインターフェイスはダイエリアを取り電力を消費するため、256-bitに制約されている。ただし、GeForce GTX 980では7GbpsのGDDR5だったのに対して、GeForce GTX 1080では10GbpsのGDDR5Xとメモリ種が異なる。そのため、メモリ帯域はGeForce GTX 980の224GB/secに対して、GeForce GTX 1080は320GB/secと1.4倍になっている。
サポートメモリ種の変更に加えて、メモリコントローラユニットをGM204の4個からGP104では8個に倍増した。これについては別記事で説明するが、DRAMアクセスの粒度を細粒度にするためだ。
加えてGP104では、メモリ回りでは、ロスレスメモリ圧縮技術を拡張した。これは、テクスチャ圧縮ではなく、フレームバッファ圧縮技術で、オンザフライでカラーデータを圧縮することで、実質的なメモリ帯域を引き上げる技術だ。従来の2:1デルタ圧縮機能をより広く適用できるようにアルゴリズムを変更、新たに4:1デルタ圧縮と8:1デルタ圧縮の2モードを導入。これらの新圧縮技術によって、メモリの実効帯域は約20%広くなったという。
物理的なピークメモリ帯域はGDDR5Xの採用で1.4倍になった。圧縮技術によってさらに、1.2倍に実効帯域を広げることで、合計で1.7倍のメモリ実効帯域が実現できたという。簡単に言えば、GeForce GTX 980の224GB/secに対してGeForce GTX 1080では380GB/sec相当の実効帯域を実現できることになる。