後藤弘茂のWeekly海外ニュース

NVIDIAの新アーキテクチャGPU「GeForce RTX 30」シリーズ

ベクタ演算とマトリックス演算のどちらを強化するか

 NVIDIAは、Ampereアーキテクチャのグラフィックス向け製品「GeForce RTX 30」シリーズを発表した。GeForce RTX 30は、ハイエンド向けの「GeForce RTX 3080/3090(GA102)」と、その下のクラスの「GeForce RTX 3070(GA104)」で構成される。製造プロセスはSamsungの8nm(10nmからの派生プロセス)、GeForce RTX 3080/3090(GA102)は280億トランジスタとコンシューマ向けGPUとしては最大。

 ただし、GPUコンピューティング向けのAmpereである「NVIDIA A100(GA100)」の540億トランジスタと比べると抑えている。A100(GA100)は高コストな7nmプロセスで製造され、メモリもインタポーザが必要なHBM2。対するGeForce RTX 3080/3090(GA102)は、相対的に製造コストが低い8nmで、メモリも基板実装できるGDDR6X。同じAmpere系アーキテクチャでも、市場の違いによってチップの作り方が大きく分かれた。

Samsungが2019年のARMTechconで発表したプロセス技術ロードマップ

 同様に内部アーキテクチャも両GPUで大きく異なる。同じAmpereの名前がついていても、GPUコンピューティング向けのGA100はマトリックス演算の向上にフォーカス、グラフィックス向けのGA102はベクタ演算の向上にフォーカスしたアーキテクチャとなっている。ディープラーニングを主軸に考えたマトリックス演算の強化か、グラフィックスを主軸に考えたベクタ演算の強化かで、路線が分かれている。また、GA102には、レイトレーシングアクセラレータも搭載されており、グラフィックスへの特化の方向が明確になっている。

 こうした設計選択の結果として、GeForce RTX 30シリーズはグラフィックス性能を大幅に伸ばしたフラッグシップGPUとなった。699ドル価格帶の“手頃なハイエンド”であるGeForce RTX 3080(GA102)」は、性能レンジでは、前世代のTuring系の699ドルレンジ製品である「GeForce RTX 2080 SUPER(TU104)」と比べて、性能が倍増している。まず、ベクタ浮動小数点演算性能では3倍近く、レイトレーシング性能では1.7倍、ディープラーニングインファレンス(Inference:推論)性能では2倍以上している。

各GPUのダイサイズとトランジスタ数。ダイサイズは一部推定
PDF版はこちら

浮動小数点演算性能が2倍になった新SM

 NVIDIAのGPUコアは、小さなクラスタ「SM(Streaming Multiprocessor)」を基本単位として構成されている。Ampereアーキテクチャでは、4個のプロセッシングブロック(Processing Block)でSMを構成する。4個のプロセッシングブロックは、テクスチャユニットとレイトレーシングアクセラレータの「RTコア」、そしてL1キャッシュを共有する。

 SM内の4個のプロセッシングブロックそれぞれに1個の命令ユニットがあり、SIMT(Single Instruction, Multiple Thread)演算では32スレッドのバッチ「Warp(ワープ)」の命令を実行ユニットに発行する。命令ユニットは多数のWarpをインフライトで制御し、Warp切り替えを行うことでレイテンシを隠蔽する。

GA102アーキテクチャのSM(Streaming Multiprocessor)のブロックダイアグラム
PDF版はこちら
GA102アーキテクチャのSM(Streaming Multiprocessor)の概要

 実行パイプラインではFP32積和算ユニットであるCUDAコアが16-wayのSIMTユニットが2ユニット、4-wayのSpecial Function Unit(SFU:スーパーファンクションユニット:超越関数など複雑な演算専用ユニット)が実装されている。FP64ユニットもスライドにはないが、実装されているはずだが、グラフィックス向け製品の場合、FP64性能は抑えられている。そのほか、後述するテンサーコアとロード/ストアユニットがある。

 GA102のプロセッシングブロックの構成は、基本は前世代のTuring(下の図)と似ている。しかし、Turingでは演算ユニットは、16-wayのFP32積和算ユニットと16-wayの32-bit整数ユニットだった。GA102では、16-wayの32-bit整数ユニットが、整数演算だけでなくFP32浮動小数点演算積和算も実行できるようになった。そのため、SM内のベクタ浮動小数点演算ユニット数は倍になり、ベクタ演算性能が倍増している。

TU102アーキテクチャのSM(Streaming Multiprocessor)のブロックダイアグラム
PDF版はこちら

 ちなみに、GA102での2ユニットの16-way FP32 SIMTユニットへの命令発行は、1つのWarpから並列化できる命令を発行する必要はない。Warpは32スレッドであるため、16-wayのSIMTユニットでは1ステップに2サイクルかかる。そのため、2個の16-wayユニットでインターリーブして命令を発行することで、演算ユニットをフルに稼働させることができる。

 SM(Streaming Multiprocessor)アーキテクチャでは、このほか、L1キャッシュとシェアードメモリにコンフィギュラブルに分割できるメモリの容量が96KBから128KBへと拡張されている。

アーキテクチャを拡張したRTコア

 SM(Streaming Multiprocessor)の4個のプロセッシングブロックの共有リソースとしてテクスチャユニットとRTコアがある。こうした構成は、最近のハイエンドGPUでは馴染みの構成だ。下は、Microsoftの新ゲーム機「Xbox Series X」のGPUコアのCU(Compute Unit)のブロック図だ。Xbox Series Xは、AMDのRDNAアーキテクチャをベースに、レイトレーシングアクセラレータを加えている。こちらも、命令ユニットが複数あり、その下に演算ユニット群があり、テクスチャユニットとレイトレーシングユニットが共有リソースとなっている。メモリアクセスを伴うレイテンシが長くて不定の処理は、スケジューリングを分離する設計思想が共通している。

Xbox Series XのGPUのCU(Compute Unit)構成図
PDF版はこちら

 NVIDIAは、前世代のTuringからレイトレーシングアクセラレータのRTコアを実装した。GA102は2世代目のレイトレーシングGPUアーキテクチャとなる。NVIDIAは、今回のGA102で、RTコアも拡張した。

 レイトレーシングでは、通常は仮想の視点から光線を逆に辿る。画面上のピクセルを通るレイを生成(レイジェネレーション:Ray Generation)、そのレイを3D空間の奥へと伸ばす(トラバーサル:Traversal)、そして、レイが3D空間の中のオブジェクトと交差するかを判定する(インターセクションテスト:Intersection Test)。3D空間のオブジェクトは、ツリー構造で管理するバウンディングボリューム(BVH)となっており、バウンディングボックスと交差するかどうかを判定し、次にトライアングルと交差するかを判定する。レイが交差した場合は、オブジェクトに応じて、そこから反射や屈折のレイを生成するかシェーダを起動するかなどに分岐する。デフューズで拡散反射する場合は複数のレイが生成される。複数回の反射の場合は、レイも複数生成される。

 NVIDIAのRTコアは、レイトレーシングのフローの中で、BVHの中でレイを伸ばす「BVHトラバーサル(Traversal)」とレイとボックスやオブジェクトの交差を判定する「インターセクションテスト(Intersection Test)」をハードウェアで行なう。GA102では、新たに「インタポーレーショントライポジショニング(Interpolate tri position)」と呼ばれるユニットが追加された。これは、動きを表現するテクニックであるモーションブラー(Motion Blur)を、レイトレーシングハードウェアでサポートする。

ハードウェアでBVHトラバーサルとインターセクションテストを実行
GA102ではモーションブラーアクセラレーションを実装

 GPUは現在、演算リソースを増やすだけでなく、特定処理を高速化する専用ハードウェアの実装へと向かっている。電力あたりの性能を向上させるためには、ドメインに特化した専用ハードウェアの比率を増やすことが必要だからだ。NVIDIAとAMD、Intelがレイトレーシングのハードウェアサポートに向かっている理由はここにある。

同じAmpereでも大きく異なるテンサーコア

 GA102にはディープラーニング向けのマトリックス演算ユニットであるテンサーコアが搭載されている。テンサーコアはVoltaアーキテクチャで実装され、Turingアーキテクチャにも採用された。Ampere系アーキテクチャでは、テンサーコアは拡張された。ただし、GPUコンピューティング向けのGA100と、グラフィックス向けのGA102では、拡張のされ方が大きく異なる。

 Volta/Turing系では、1個のプロセッシングユニットの中に、2個のテンサーコアが配置されていた。各テンサーコアは、FP16の場合、4x4のマトリックスと4x4のマトリックスの積和算を実行する。合計で64 FP16積和算ユニット相当のコアだ。各プロセッシングユニットにつき128 FP16演算ユニット、SM合計で512ユニットが実装されていた。

 GA102アーキテクチャでは、各プロセッシングユニットに、1個のテンサーコアが配置されている。詳細はまだ明かされていないが、FP16の場合、8x4と4x4のマトリックスの積和算を実行する128 FP16積和算ユニット相当のコアと見られる。1ユニットなので、各プロセッシングブロックの演算ユニット数は128で変わらず、SM全体でも512ユニットで変わらない。

AmpereのGA102アーキテクチャのテンサーコアの推測図。8x4と4x4のマトリックス演算構成と見られる
PDF版はこちら
Volta/Turing系のテンサーコアの構成。各プロセッシングブロックに4x4のマトリックス同士の積和算ユニットが2個搭載されている
PDF版はこちら

 しかし、演算ユニット数は同じでも、GA102ではテンサーコアのアーキテクチャは拡張されており、現在公開されている範囲では、プルーニング(Pruning:刈り込み)によるスパース(疎)ネットワークに対応する。プルーニングは、ニューラルネットワークの中で重要度が低いパラメータを削除するテクニックだ。ディープラーニングのインファレンス(推論)のさいに、性能やメモリ量を減らすために使われる。NVIDIAのプルーニング対応ハードウェアの実装では2分の1にデータとコンピュテーションの量を削減できる。そのため、インファレンス(推論)では、スパース(疎)なニューラルネットワークを用意すれば、従来の2倍の性能を発揮できる計算となる。

スパースネットワークにハードウェアで対応した新テンサーコア
テンサーコアアーキテクチャの違い

 同じAmpereファミリのGA100もテンサーコアは拡張されている。こちらは、演算ユニット数が倍増され、8x8と8x4のマトリックス同士の演算構成に拡張されている。GA100は、テンサーコアに多くのトランジスタをつぎ込んでおり、ディープラーニングを重視した設計となっている。その点では、グラフィックス向けのベクタ演算性能にフォーカスしたGA102と大きく方向が異なっている。

AmpereのGA100アーキテクチャのテンサーコア。8x8と8x4のマトリックス同士の演算構成に拡張されている
PDF版はこちら

GPU全体のクラスタ構成などは前世代を継承

 下の図は、GA102の全体アーキテクチャの推測ブロック図だ。GA102の全体は、6個のクラスタ「GPC(Graphics Processing Cluster)」で構成されている。GPCはレンダーバックエンド以外のグラフィックスコアとしての機能をまとめたクラスタで、言ってみればミニGPUだ。GPCには、ジオメトリからピクセルへと変換するラスタライザがあり、GPC内のSMで共有されている。また、ジオメトリパイプの固定機能ユニットが2個のSMごとに共有されている。

Ampere GA102の全体構成の推測図
PDF版はこちら

 GA102ダイでは、6個のGPCに、それぞれ14ユニット以上のSM(Streaming Multiprocessor)が含まれると推定される。その場合、物理的に搭載されているSM数は84ユニットとなる。今回発表のGPUのうち最大構成の「GeForce RTX 3090」では、SM数が82で、6個のGPCのうち1ユニットだけが12 SM構成となる。

 もっとも、歩留まりを上げるためのリダンダンシのために複数のSMが無効になっており、実際にはもっと多数のSMが搭載されている可能性もある。欠陥が含まれるSMを無効にすることで、歩留まりを上げる。たとえば、TuringアーキテクチャのTU102の場合、72個のSMが実装されていて、GeForce RTX 2080 Tiでは68個のSMが有効にされていた。72SMがすべてが有効にされた選別品はTITAN RTXだった。

TuringアーキテクチャのTU102のブロック図
PDF版はこちら
GeForce RTX 3080のブロック図
TuringアーキテクチャのTU104のブロック図

 GA102アーキテクチャでは、各SMに搭載されているFP32浮動小数点積和演算ユニットは128個。そのため、トータルのFP32ユニット数はGeForce RTX 3090では10,496個となる。Turingアーキテクチャと比較すると、SM数が増えた上に、各SMのFP32数が2倍になったため、FP32演算性能は大幅に引き上げられた。ピークのFP32ベクタ演算性能は、GeForce RTX 3090で36TFLOPSに達する。Turingアーキテクチャでは、TITAN RTXで72SM、4608 FP32ユニットで、FP32性能は16TFLOPSだった。

 同じ価格帯のチップで比較すると、差はさらに明確だ。同じGA102ダイと見られるGeForce RTX 3080では、SMは68個へと減らされている。しかし、SMの構成が変わったことで、FP32ユニット数はGPU全体で8,704ユニットになった。Turingアーキテクチャで同じ価格レンジのGeForce RTX 2080 SUPER(TU104)の3,072ユニットの2.8倍の演算ユニット数になる。結果として、同価格レンジでベクタ演算性能は約3倍に引き上げられる。

GA102からの派生と見られるGeForce RTX 3080
PDF版はこちら

メモリには19GbpsのGDDR6Xを採用

 一方、ディープラーニング向けのマトリックス演算性能は、各SMに含まれるテンサーコアの演算ユニット数は512ユニットで同じであるため、素の性能ではSMの増加分だけとなる。GA102アーキテクチャでは、トランジスタは、ベクタユニットに費やし、マトリックスユニットの強化は抑えている。

 テンサーコアのFP16性能は、GeForce RTX 3090で143TFLOPS、3080で118TFLOPS。TITAN RTXの130TFLOPSとそれほど差がない。しかし、GA102のテンサーコアは、プルーニング(刈り込み)によるスパース(疎)ネットワークに対応している。そのため、ニューラルネットワークモデルがスパースネットワークに対応すると、実質的なインファレンス性能を2倍に高めることができる。GeForce RTX 3090のFP16でのインファレンスの性能は285TFLOPS相当となる。Turing世代と比べると倍増する。

 レイトレーシングも、ハードウェア支援を強化したことで、SM内のユニット数や1個で同じだが、性能は強化されている。GeForce RTX 3080でレイトレーシング性能は58 RT TFLOPS。NVIDIAはGeForce RTX 2080 SUPER(TU104)のレイトレーシングは34 RT TFLOPSとしており、これも1.7倍に増える。

 GA102は、12ユニットのメモリコントローラを搭載する。メモリインターフェイス幅は384-bit。サポートメモリ種はGDDR6Xで、GA102が最初のサポートチップとなる。GDDR6XはPAM4の採用で転送レートを引き上げた新DRAM規格。GeForce RTX 3090/3080は19Gbpsの転送レートのGDDR6Xを搭載する。GDDR6の14Gbpsから35%転送レートが上がったことで、メモリ帯域はついにTB/secが目前となった。

PAM-4を採用した新メモリGDDR6X

 フルに12のメモリインターフェイスが有効になっているGeForce RTX 3090の場合は、メモリインターフェイス幅は384-bitで、メモリ帯域は912GB/sec。12のメモリインターフェイスユニットのうち10ユニットだけを使う320-bit幅のGeForce RTX 3080でも760GB/sec。これは、GDDR6ベースで12ユニット384-bit幅のGeForce RTX 2080 SUPER(TU104)の496GB/secをはるかに上回る。

 I/O回りでは、PCI ExpressはGen4に拡張された。また、GPU間接続のNVLinkもハイエンド製品では継承されている。

 NVIDIAが投入する新しいグラフィックス向けGPU、GeForce RTX 30。NVIDIAは、GPUコンピューティング向けのNVIDIA A100では、ディープラーニング向けの機能の強化を重視した。しかし、GeForce RTX 30系では、グラフィックス向けの強化が目立つ。NVIDIAは、現在、GPUを2系統のコンフィギュレーションへと分化させている。アーキテクチャの共通性はできる限り保ちながら、異なるフレバーのチップにしようとしている。Ampere世代は、そうしたNVIDIAの戦略が明確に見える。