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

NVIDIAが次世代グラフィックスのために作ったGPU「GeForce RTX」ファミリー

Turingアーキテクチャのフィーチャ

 NVIDIAは、ハイブリッドレンダリングへの扉を開く新GPUアーキテクチャ「Turing(チューリング)」を市場に投入する。

 NVIDIAはTuring世代で、レイトレーシングをアクセラレートする「RTコア」と、深層学習向けの「Tensorコア」を搭載した。製造プロセス技術は12nmとなり、対応メモリはGDDR6となった。

ハイブリッドレンダリングのためのアーキテクチャ

 TuringベースのGeForce製品ラインナップは3系統で、それぞれダイ(半導体本体)とコードネームが異なる。

 ハイエンドの「GeForce RTX 2080 Ti」が「TU102」、その下のクラスの「GeForce RTX 2080」が「TU104」、ミドルレンジGPUの「GeForce RTX 2070」が「TU106」。従来なら2種類のダイ(半導体本体)で作り分けていたラインナップを、3種類のダイで構成している。

 TU102が18.6B(186億)トランジスタで754平方mm、TU104が13.6B(136億)トランジスタで545平方mm、TU106が10.8B(106億)トランジスタで445平方mmで、もっとも小さなTU106ですら、AMDの「Radeon RX Vega64 (Vega10)」の12.5Bトランジスタ486平方mmに迫る。

TuringアーキテクチャのTU102
GeForce RTXラインナップ
GPU Features GTX 1080Ti RTX 2080 Ti Quadro 6000 Quadro RTX 6000 GeForce GTX 1080 GeForce RTX 2080 Quadro P5000 Quadro RTX 5000 GeForce GTX 1070 GeForce RTX 2070
Codename GP102 TU102 GP102 TU102 GP104 TU104 GP104 TU104 GP104 TU106
Architecture Pascal Turing Pascal Turing Pascal Turing Pascal Turing Pascal Turing
GPCs 6 4 6 4 6 3
TPCs 28 34 30 36 20 23 20 24 15 18
SMs 28 68 30 72 20 46 20 48 15 36
CUDA Cores/SM 128 64 128 64 128 64 128 64 128 64
CUDA Cores/GPU 3,584 4,352 3,840 4,608 2,560 2,944 2,560 3,072 1,920 2,304
Tensor Cores/SM NA 8 NA 8 NA 8 NA 8 NA 8
Tensor Cores/GPU NA 544 NA 576 NA 368 NA 384 NA 288
RT Cores NA 68 NA 72 NA 46 NA 48 NA 36
GPU Base Clock MHz (Reference/Founders Edition) 1,480 / 1,480 1,350 / 1,350 1,506 1,455 1,607 / 1,607 1,515 / 1,515 1,607 1,620 1,506 / 1,506 1,410 / 1,410
GPU Boost Clock MHz (Reference/Founders Edition) 1,582 / 1,582 1,545 / 1,635 1,645 1,770 1,733 / 1,733 1,710 / 1,800 1,733 1,815 1,683 / 1,683 1,620 / 1,710
RTX-OPS (Tera-OPS) (Reference/Founders Edition) 11.3 / 11.3 76 / 78 NA 84 8.9 / 8.9 57 / 60 NA 62 6.5 / 6.5 42 / 45
Rays Cast (Giga Rays/sec) (Reference/Founders Edition) 1.1 / 1.1 10 / 10 NA 10 0.89 8 / 8 NA 8 .065 / .065 6 / 6
Peak FP32 TFLOPS (Reference/Founders Edition) 11.3 / 11.3 13.4 / 14.2 12.6 16.3 8.9 10 / 10.6 8.9 11.2 6.5 / 6.5 7.5 / 7.9
Peak INT32 TIPS (Reference/Founders Edition) NA 13.4 / 14.2 NA 16.3 NA 10 / 10.6 NA 11.2 NA 7.5 / 7.9
Peak FP16 TFLOPS (Reference/Founders Edition) NA 26.9 / 28.5 NA 32.6 NA 20.1 / 21.2 NA 22.3 NA 14.9 / 15.8
Peak FP16 Tensor TFLOPS with FP16 Accumulate (Reference/Founders Edition) NA 107.6 / 113.8 NA 130.5 NA 80.5 / 84.8 NA 89.2 NA 59.7 / 63
Peak FP16 Tensor TFLOPS with FP32 Accumulate (Reference/Founders Edition) NA 53.8 / 56.9 NA 130.5 NA 40.3 / 42.4 NA 89.2 NA 29.9 / 31.5
Peak INT8 Tensor TOPS (Reference/Founders Edition) NA 215.2 / 227.7 NA 261 NA 161.1 / 169.6 NA 178.4 NA 119.4 / 126
Peak INT4 Tensor TOPS (Reference/Founders Edition) NA 430.3 / 455.4 NA 522 NA 322.2 / 339.1 NA 356.8 NA 238.9 / 252.1
Frame Buffer Memory Type 11,264 MB 24,576 MB 8,192 MB 16,384 MB 8,192 MB
Frame Buffer Memory Size and Type GDDR5X GDDR6 GDDR5X GDDR6 GDDR5X GDDR6 GDDR5X GDDR6 GDDR5X GDDR6
Memory Interface 352-bit 384-bit 256-bit 256-bit 256-bit
Memory Clock (Data Rate) 11 Gbps 14 Gbps 9 Gbps 14 Gbps 10 Gbps 14 Gbps 9 Gbps 14 Gbps 8 Gbps 14 Gbps
Memory Bandwidth (GB/sec) 484 616 432 672 320 448 288 448 256 448
ROPs 88 88 96 96 64 64 64 64 64 64
Texture Units 224 272 240 288 160 184 160 192 120 144
Texel Fill-rate (Gigatexels/sec) 354.4 / 354.4 420.2 / 444.7 395 510 277.3 / 277.3 314.6 / 331.2 277 348 202 / 202 233.3 / 246.2
L2 Cache Size 2,816 KB f 3,072 KB 6,144 KB 2,048 KB 4,096 KB 2,048 KB 4,096 KB 2,048 KB 4096 KB
Register File Size/SM 256 KB 256 KB 256 KB 256 KB 256 KB 256 KB 256 KB 256 KB 256 KB 256 KB
Register File Size/GPU 7,168 KB 17,408 KB 7,680 KB 18,432 KB 5,120 KB 11,776 KB 5,120 KB 12,288 KB 3,840 KB 9216 KB
NVLink NA 2x8 NA 2x8 NA 1x8 NA 1x8 NA NA
NVLink bandwidth(bi-directional) NA 100GB/sec NA 100GB/sec NA 50GB/sec NA 50GB/sec NA NA
TDP (Reference/Founders Edition) 250 / 250 W 250 / 260 W 250 W 260 W 180 / 180 W 215 / 225 W 180 W 230 W 150 / 150 W 175 / 185 W
Transistor Count 12 Billion 18.6 Billion 12 Billion 18.6 Billion 7.2 Billion 13.6 Billion 7.2 Billion 13.6 Billion 7.2 Billion 10.8 Billion
Die Size 471平方mm 754平方mm 471平方mm 754平方mm 314平方mm 545平方mm 314平方mm 545平方mm 314平方mm 445平方mm
Manufacturing Process 16nm 12nm FFN 16nm 12nm FFN 16nm 12nm FFN 16nm 12nm FFN 16nm 12nm FFN

 本来のNVIDIAの命名規則では、コードネームの末尾の数字が6番台のGPUダイは、サイズが200平方mm台だが、Turing系では2倍のサイズとなっている。つまり、機能を増やした分、ダイ(半導体本体)を大きくしてトランジスタ数を増やしたGPUファミリがTuringだ。

 TU102は、NVIDIAのグラフィックス向け設計のGPUでは、過去最大のサイズとなる。また、Turingでは、200平方mm台やそれ以下の、従来ならメインストリームクラスのダイが存在しない。

 NVIDIAは、Turing世代では、GPUのプロセス技術を12nmプロセスに留めた。TSMCの12nmプロセスは、同社の16nmプロセスからの派生プロセスで、同じセルハイトのスタンダードセルを使うかぎり、それほどトランジスタ密度が上がらない。

 NVIDIAは7.5Tのスタンダードセルを継続していると見られ、トランジスタの増加分はダイの肥大化となる。結果として、サーバー向けCPUクラスの大型ダイのGPUファミリが産まれた。

 ちなみに、NVIDIAは本来、この世代ではSamsungの10nmプロセスを使う予定だったと言われている。成熟した12nmにとどまることで、ダイを大きくしても歩留まりを上げる選択を行なったと見られる。

GPUのダイサイズ

レイトレーシングの処理をアクセラレートするRTコア

 Turingアーキテクチャの目玉は、レイトレーシングのアクセラレータである「RTコア(RT Core)」だ。RTコアは、NVIDIA GPUで初めての実装となる。

 レイトレーシングは、通常は仮想の視点から光線を逆に辿る。画面上のピクセルを通るレイを生成(レイジェネレーション: Ray Generation)し、そのレイを3D空間の奥へとどんどん伸ばす(トラバーサル: Traversal)、そしてレイが3D空間の中のオブジェクトと交差するかを判定する(インターセクションテスト: Intersection Test)。

 交差した場合は、オブジェクトに応じて、そこから反射や屈折のレイを生成するかシェーダを起動するかなどに分岐する。デフューズで拡散反射する場合は、複数のレイが生成される。複数回の反射の場合は、レイも複数生成される。

ラスタライゼーションとレイトレーシングの違い
レイトレーシングで真の反射を実現しながらリアルタイムで動かす

 RTコアでは、生成したレイのトラバーサルからインターセクションまでをハードウェアで処理する。これらの処理は複雑であるため、シェーダでソフトウェア実行する場合は1,000命令以上を必要とするが、RTコアはそれをオフロードできる。

TuringのRTコアがリアルタイムレイトレーシングを可能とする
レイトレーシングのパイプラインの例

 レイトレーシングでは、トラバーサルは段階的でステップ数が多く、インターセクションは多くのオブジェクトと交差の判定を行なわなければならないため、計算量が膨大になる。そこで、NVIDIAのRTコアでは、これらを軽減するテクニックをハードウェアでサポートする。

 交差判定を減らす手法としては、バウンディングボリューム(Bounding Volume)や空間分割などがある。NVIDIAは階層型のバウンディングボリューム「BVH(Bounding Volume Hierarchy)」を使うトラバーサルを採用している。

 この技法は、NVIDIAのGPUソフトウェア実装のレイトレーシングAPIである「OptiX」に採用されている。

レイトレーシングでは、レイに対して膨大な数のトライアングルとのインターセクションテストが必要となる

RTコアの鍵となる技術「バウンディングボリューム」

 バウンディングボリューム(BVH)では、3D空間のオブジェクトを、外接する大きなボックスで囲ってしまう。

 たとえば、人型のキャラクターなら、それぞれの部位を囲うボックスで覆ってしまう。ゲームプログラムでの、当たり判定のボックスと似たようなものだ。銃弾の軌跡の当たりを判定する代わりに、レイの軌跡の交差を判定する。

オブジェクトを外接するボックスで囲い、レイとボックスとのインターセクションを判定する

 BVHでは、ボックスはツリー構造の階層となっており、大きなボックスのなかに、さらにオブジェクトに近い小さなボックスが配置されている。

 BVH法では、レイとボックスのインターセクションのテストを行ない、交差した場合は、さらに下位のボックスのインターセクションをテストする。

さらに下位のより小さなボックスとのインターセクションを判定
最後にトライアングルとのインターセクションを判定する

 BVHでは、レイと交差する可能性のあるトライアングルすべてをテストする必要がなく、数回の階層型のボックスのテストだけで済むため、インターセクションテストの回数を減らすことができる。

 また、トラバーサルも大きなボックスから次のボックスへと一気に伸ばすことができるため、トラバーサルの計算量も減らすことができる。

バウンディングボリュームをハードウェアでサポート

 RTコアは、バウンディングボリュームのデータ構造をサポートし、ボックス毎にインターセクションテストを行なう。

 従来のラスタライズ法レンダリングでは、ジオメトリデータはラスタライズしてピクセルに変換したあとは、廃棄することができた。

 しかし、レイトレーシングを併用するハイブリッドレンダリングでは、ジオメトリデータはラスタライズ後も保持する必要がある。

従来は、BVHトラバーサルもインターセクションテストも、すべてソフトウェアで実装していた。実行には数千命令のステップが必要だった
TuringのRTコアは、数千命令分のBVHトラバーサルとインターセクションテストを、ハードウェアで処理する
結果として、Pascal世代と比べるとレイトレーシングの性能は10倍近くに向上。しかも、シェーダのプロセッシング能力を食うこともない

 NVIDIAのRTコアへの対応では、ジオメトリデータはバウンディングボリュームとひも付けされて、メモリ上のBVHデータベースに格納されるという。

 RTコアは、BVHのデータ構造にしたがって、上位のボックスからトライアングルまで、ツリー構造で読み出してインターセクションテストを行なう。

 バウンディングボリューム(BVH)法の難点は、BVHのボックスを前もって定義しなければならない点だ。

 これについては、現在のRTコアでは自動的に生成する機能は持たないと、NVIDIAは説明する。そのため、ゲームデベロッパなど3Dオブジェクトの作成者は、RTコアによるレイトレーシングを効果的に使うためには、BVHデータも用意しなければならない。

 複雑なオブジェクトや、動いて形状が変化するようなオブジェクトの場合、かなり複雑な作業となる。しかし、空間を単純にボクセルに分割して交差を判定する方法よりも、BVHのほうが効率がずっと高いため、NVIDIAはBVHを採用したと見られる。

 こうした構造を持つため、RTコアによるレイトレーシングは、どのようにRTコアを使うかによって難度が異なる。

 点光源や面光源などにレイトレーシングを使う場合は簡単だが、複雑なレイトレーシングを行なう場合はBVHデータを用意する手間がかかる。BVHデータも、固定され形状が変化しないオブジェクトは簡単だが、動的に変化する場合は面倒になる。

 もちろん、BVHに対するソフトウェアツールによるサポートが充実すれば、このハードルは低くなるため、時間とともに解決すると思われる。

 現在のグラフィックスは、3角形のポリゴンをベースにしたジオメトリをラスタライズしており、曲面はポリゴンに分割している。

 しかし、レイトレーシングを使うなら、ポリゴンである必要もなくなる。交差の判定ができれば良いため、曲面をポリゴンに分割せずに、曲面のまま扱うことも原理的には可能となる。

 しかし、NVIDIAのRTコアが扱うのは、基本はハイブリッドレンダリング、つまりラスタライズ法のレンダリングとの組み合わせとなる。そのため、現在のRTコアはポリゴンを前提とした設計になっているとみられる。

ハイブリッドレンダリングをオンにした場合とオフにした場合の違い

SMのマイクロアーキテクチャを大きく変更

 NVIDIAは、ハイブリッドレンダリング向けの機能の搭載のために、GPUの演算クラスタである「SM (Streaming Multiprocessor)」のマイクロアーキテクチャを、Turingで大きく変えた。

 TuringのSMは、コンピュート向けGPUアーキテクチャ「Volta(ボルタ)」をベースとしている。グラフィックス系の前世代であるPascal(パスカル)のGP102系とはSMが大きく異なる。

 GP102系のSMは、その前世代のMaxwell(マクスウェル)を踏襲していた。それに対して、VoltaのSMは新設計で、TuringのSMは、VoltaのSMからスタートしてさらに発展させたアーキテクチャとなっている。

TuringのSMアーキテクチャ。一部推測
TuringのSMの概念図

 TuringアーキテクチャでのSMは、4個のサブブロックと共有ブロックに分かれている。サブブロックである「Processing Block(プロセッシングブロック)」は、1サイクルに1命令イシューのプロセッサコアとなっている。

 NVIDIA GPUは、「warp」と呼ばれる32スレッドのバンドルで命令を実行する。Processing Blockには1個の命令ユニットがあり、warpスケジューラが、各サイクルに1個のwarpから1個の命令をフェッチして、実行パイプラインにイシューする、きわめてシンプルな構造となっている。

 CPU的に言えば、Processing BlockがCPUコアにあたる。そのたとえでは、SMはクアッドコアのクラスタだ。

浮動小数点演算と整数演算を並列に実行

 Processing Block内でのWarpスケジューラからの命令イシューは、3系統に分かれる。演算ユニット群、Tensorコア、メモリアクセスユニット群の3系統だ。

 通常の演算ユニットに対する命令は「Math Dispatch Unit(マスディスパッチユニット)」からディスパッチされる。演算ユニットは、16-wayのFP32積和算ユニット(CUDAコア)、16-wayの32-bit整数演算ユニット、4-wayのSpecial Function Unit(SFU: スペシャルファンクションユニット、超越関数など複雑な演算専用ユニット)となる。

 命令イシューは、各サイクルに1warpの1命令に制限されているが、演算ユニットは複数サイクルのスループットでwarpを実行する。

 FP32のCUDAコアと整数演算ユニットは、それぞれ16-wayであり、32スレッドのwarpを実行するには、2サイクルのスループットとなる。

 つまり、FP32と整数の両ユニットに対しては、2サイクルに1回しか命令を発行できない。

 そのため命令ディスパッチャは、FP32 CUDAコアと整数演算ユニットに、交互に命令を発行することで、理論上は両ユニットを並列にフル稼働させることができる。

 言い換えれば、FP32浮動小数点演算と整数演算を平行して実行することができる。

浮動小数点演算と整数演算を並列に実行可能なTuring SM

 また、各サイクルに発行される命令は、それぞれ異なるwarpからピックできる。ある命令の次に発行される命令は、別なスレッドの命令となる。

 そのため、スレッドのなかでの命令レベルの並列性を考慮する必要がなく、制約がない。1つのwarpの命令ストリームに、浮動小数点と整数の命令が交互にスケジュールされている必要はないため、比較的高い確率で並列に実行できる。

 GPUコンピューティング向けのVoltaでは、Processing Block内に8-wayのFP64ユニットも搭載する。しかし、グラフィックス向けのTuringでは、FP64の性能はFP32の32分の1となっている。各サイクルにSM毎に2命令のスループットだ。

 Processing Block単位では、2サイクルに1命令スループットとなる。FP64は、あくまでも命令の互換性を保つための実装であり、性能は重視しないという位置づけだ。

Tensorコアはインファレンス向けに拡張

 Turingは、グラフィックス向けGPUでは初めて深層学習用ユニットのTensorコアを搭載した。

 Tensorコアは、これまでGPUコンピューティング向けのVoltaや、車載向けのXavier(エグゼビア)にしか搭載されていなかった。

 Tensorコアは4x4のマトリックスの積和算ユニットだ。基本の仕様はFP16で、4x4の乗算を4列並列に実行できる。そのため、64ユニットの乗算ユニットと16ユニットの加算ユニットを、1個のTensorコアのなかに備え、1サイクルで64の積和算が可能だ。

TuringのTensorコア
n個のニューロンからの入力をn個のニューロンが受ける、ニューラルネットワークの仕組みに合わせたTensorコア
ベクタユニットで1列ずつ処理するPascalに対して、Tensorコアによるマトリックス演算では、大幅に高速化される

 GPUコンピューティング向けのVolta GV100もTensorコアを搭載しているが、Turing系のGPUのTensorコアは、実装が若干異なる。

 GV100では、FP16半精度浮動小数点演算のみのサポートで、トレーニング(学習)向けには、FP16同士の乗算の結果を4個加算して、FP32に出力できる。インファレンス(推論)では、FP16同士の乗算を4個加算してFP16で出力する。FP32出力では、スループットが半分に落ちる。

 一方、TuringのTensorコアでは、Voltaと同じFP16精度をサポートするだけでなく、8bitの整数「Int8」と4bitの整数「Int4」もサポートする。

 演算性能はInt8でFP16の2倍、Int4で4倍となる。サーバー向けを主眼としたGPUであるGV100に対して、Turing系GPUはクライアントであるため、推論に力点があり、推論で多用される低数値精度が強化された。

TuringのTensorコアでは、int4時には455TOPSの性能となる

深層学習をアンチエイリアシングに適用

 なぜ、NVIDIAは深層学習向けのTensorコアを、グラフィックス向けのGPUに搭載したのか。それは、Tensorコアによって、グラフィックス処理の高品質化を図ることができるからだという。

 その一例としてNVIDIAが強調するのが、非常に高品質なアンチエイリアシングを実現する「DLSS (Deep Learning Super Sampling)」だ。MSAA x64よりも優れたAAを、より低い負荷で実現できるという。

アンチエイリアシングの新技術となるDLSS

 ちなみに、NVIDIAが発表している「Turingは前世代のPascal系に対して2倍の性能」というスライドの根拠は、ここにある。

 細かなデータは公開していないが、同等品質のアンチエイリアシングを実現するために必要な性能を、負荷の高いMSAAと比較すると、DLSSのほうが性能がはるかに高くなるとしている。

処理量の多い、多重のMSAAをかけるよりも、DLSSを使ったほうが性能が上がることを示したスライド

 VoltaとTuringともに、1個のProcessing Blockのなかに、2個のTensorコアを備える。SM全体では8個のTensorコアとなる。

 命令ユニットは、1サイクルに2個のTensorコアに同時に命令を発行することが可能で、理論上は2個のTensorコアをフル稼働させることができる。

 Tensorコアは命令発行の仕組みがほかの演算ユニットと異なるため、命令ディスパッチユニットが分離されている。

 このほか、各Processing Blockには、64KBときわめて大量のレジスタファイルが配置されている。SM全体では256KBのレジスタファイルとなる。

 GPUでは、インフライトで走るスレッド数が非常に多いため、レジスタファイルが大きい。各Processing Blockにつき、32-bitレジスタが合計16,384本。実際には、32スレッドのwarp単位のアクセスとなる。

 SMアーキテクチャの改良や、レジスタファイルの強化、後述するメモリ階層の改良などによって、Turingアーキテクチャでは、PascalよりもSM自体の効率が上がっている。そのため、NVIDIAはシェーダ性能も向上していると説明する。

TuringではPascal世代よりもシェーダ性能も向上する

RTコアは約10.5サイクルのスループットでレイを実行

 NVIDIAのSMは、Processing Block間で共有されるユニットを備える。従来はテクスチャユニットやL1データキャッシュ/シェアードメモリが共有ユニットだった。NVIDIAによると、RTコアも同様に共有コアとして配置されているという。

 NVIDIAのVolta SMでは、共有ユニットへの命令は、専用のキュー「MIO queue」にいったん格納される。MIOキューから、さらに4個のサブコアの命令を統合したMIOスケジューラに渡され、そこから発行される。

 NVIDIAは、もともとKepler世代から命令スケジューリングの手法を変更、レイテンシが固定されている演算命令と、レイテンシにバラつきがあるメモリアクセス系の命令のスケジューリングを分けて行なうようになった。

 Keplerでは、演算コアに対しては、演算レイテンシをベースにコンパイラでスケジューリングを行ない、メモリアクセス命令については、スコアボーディングでスケジューリングを行なっている。

 Voltaもその流れを継承している可能性が高く、演算系とメモリ系のスケジューリングが分離されている。

VoltaのProcessing Blockのアーキテクチャ

 この仕組みが、Turingも同様だとすれば、スケジューラが分離されている理由もよくわかる。

 MIOスケジューラは動的に命令スケジューリングを行なっており、それによってレイテンシに幅がある命令を制御していると見られる。RTコアも、BVHデータベースを参照するためにメモリアクセスが非常に多く、レイテンシに幅がある。

 TU102のレイトレーシング性能は、10GRay/s(秒間10兆レイ)と発表されている。RTコアはGPU全体で68ユニット、動作周波数はブーストで1.545GHz。そのため、1個のRTコア自体のスループットは計算上で0.095ray/cycleになる。

 言い換えれば、1個のRTコアは、約10.5サイクルに1回レイの処理を受け付けることが可能という計算になる。つまりRTコアは、約10サイクルスループットのユニットとなる。

 もっとも、当たり前の話だが、NVIDIAによるとRTコアのレイテンシは、レイによって異なり、一定ではないという。

 そのため、10Giga Ray/sというTU102 RTコアのスペックも、じつはNVIDIAによる平均スループットの予測をベースにしたものとなる。複雑なレイ処理になると、この数字よりも落ちる可能性がある。

 RTコア自体は、すでに説明したように、BVHトラバーサルとインターセクションテストをハードウェアでサポートする。レイをジェネレートするとRTコアに渡され、いったんレイがトライアングルにヒットすると、RTコアからシェーダに戻すと見られる。

 RTコアにオフロードする処理は限定的で、レイトレーシングに関するすべての処理がRTコアで行なわれるわけではない。

 しかし、処理の重い部分はRTコアのハードウェアでアクセラレートされるため、劇的にレイトレーシング性能を上げることができる。

Voltaを踏襲した改良されたメモリ階層

 メモリ階層は、Volta同様に統合されたキャッシュ階層となっている。SMの内部には、コンフィギュラブルな96KBのメモリがある。

 96KBのコンフィギュラブルメモリは、4個のProcessing Blockの間での共有ユニットだ。96KBを分割して、異なる用途に振り分けることができる。

TuringのSMのメモリ階層
グラフィックス向けのSMのキャッシュ/共有メモリの階層

 伝統的なグラフィックスワークロードでは、64KBのシェーダメモリと32KBのテクスチャキャッシュ兼レジスタファイルスピルエリアに設定することができる。

 コンピュートワークロードでは、32KBのシェアードメモリと64KBのL1データキャッシュの組み合わせか、64KBのシェアードメモリと32KBのL1データキャッシュのどちらかに設定できる。RTコアも、コンフィギュラブルメモリの参照ができると推測される。

 SM内のキャッシュでは、このほかに命令系のキャッシュ階層がある。L1命令キャッシュはSMで共有で、各Processing Block内には小さなL0命令キャッシュがある。

 NVIDIA GPUでは、L2キャッシュは、SM側ではなくDRAMコントローラ側にある。SMとDRAMコントローラはクロスバーで結ばれている。DRAMインターフェイスは32-bitで1チャネルとなっている。

 TU102では、合計12個のx32 DRAMインターフェイスを備えており、合計で384-bitのGDDR6インターフェイスとなる。ただし、GeForce RTX 2080 Ti(TU102)では、そのうち1個が無効化されており、メモリインターフェイスは352-bitとなる。

 L2キャッシュは、512KBずつDRAMコントローラに付随しており、12ユニットで合計6MBとなる。1個のDRAMコントローラが無効化になっているGeForce RTX 2080 Tiでは、L2キャッシュの量は5,632KBとなる。

メモリアクセスの効率が高いGDDR6

 サポートするメモリ種類は、GDDR5XからGDDR6となった。メモリ転送レートはGDDR5Xでの最高11Gbpsから、GDDR6では14Gbpsへと大幅に高速化された。

 メモリ帯域は、352-bitインターフェイスのGeForce RTX 2080 Ti(TU102)で616GB/s。NVIDIAのリファレンスボードは、8Gbit DRAMチップでメモリ搭載量は11GB。メモリの転送レートは、Turingファミリを通じて14Gbpsで共通している。

 GeForce RTX 2080(TU104)では256-bitインターフェイスで448GB/s、8GB。GeForce RTX 2070(TU102)も同様に256-bitインターフェイスで448GB/s、8GB。今回のGDDR6の提供はMicron Technologyとなっている。

JEDEC(半導体の標準化団体)の新グラフィックスメモリGDDR6を採用

 GDDR6には、メモリの転送レートの向上以外にも利点がある。

 GDDR6は、メモリインターフェイスが完全に新規格となっており、x32のインターフェイスは、内部的にx16に分割されている。1個のDRAMチップが2つのx16チャネルで構成されており、チャネル毎に個別のメモリアクセスが可能だ。

 そのため、メモリアクセスの粒度はGDDR5までと同様に抑えられており、GDDR5Xのようなアクセス粒度の問題がない。その分、効率の高いメモリアクセスが可能だ。

GDDR6のTuringではメモリの実効率も上がっている

TU102では4608個のCUDAコアを搭載

 NVIDIA GPUは、階層型の構造となっている。SMを最小単位として、複数のSMを束ねたGPC (Graphics Processing Cluster)というクラスタが構成されている。

 GPCは、レンダーバックエンド以外のグラフィックスコアとしての機能をまとめたクラスタで、言ってみればミニGPUだ。GPCには、ジオメトリからピクセルへと変換するラスタライザがあり、GPC内のSMで共有されている。また、ジオメトリパイプの固定機能ユニットが、2個のSM毎に共有されている。

 TU102ダイの場合は6個のGPCがあり、それぞれのGPCは12個のSMとラスタライザで構成されている。合計で72個のSMが搭載されている。

TU102のGPCの構成
TU102

 TU102を使ったプロ向けのQuadro RTX 6000/8000は72個のSMが有効にされており、GPU全体で4,608個のCUDAコアが含まれている。

 コンシューマ向けのRTX 2080 Tiは、SMのうち68個が有効とされており、CUDAコアが4,352個となっている。4個のSMが無効化にされているのは、歩留まりの向上のためだ。

TU102の全体構成

高速インターコネクトNVLinkを実装

 I/O回りは、クロスバーに接続されたHubに接続されている。Turingでは、上位のダイには、NVIDIAのチップ間インターコネクト「NVLink」が実装されていることも特徴だ。

 NVLinkはVolta GV100には6リンクが実装されているが、TuringではTU102に2リンク、TU104に1リンクが実装されている。

 NVLinkは差動信号(Differential Signaling)方式の狭インターフェイスで、各リンクにつき、片方向8ペア、双方向16ペアで構成される。

 現在の世代のNVLinkの転送レートは、1ペアあたり片方向で25Gbps。そのため、8ペアで構成される1リンクの片方向リンクは25GB/sの帯域、双方向で50GB/sの帯域となる。

NVLinkの1リンクの構成。8ペアの送信と受信の2セットで構成される

 グラフィックス向け製品であるGeForce RTXでは、NVLinkはマルチGPU構成のSLIに使われる。

 NVIDIAのリファレンスデザインにはNVLinkの接続ポートがあり、2枚のカードを接続するNVLinkブリッジも提供される。従来のPCI Express経由のSLIに対して帯域が上がるだけでなく、NVLinkを経由したメモリ共有も可能だ。

 現在は、2カードの接続構成だけがサポートされているが、TU102については、NVLinkが2リンクなので、物理的には3枚カード構成も可能だ。もちろん、NVSwitchを使えば、4枚以上のマルチGPU構成も可能にはなる。

 TuringアーキテクチャのGeForce RTXファミリの設計思想は、ハイブリッドレンダリングへの道を開くことだ。

 ダイサイズを大きくして増やしたトランジスタの多くは、レイトレーシングと深層学習につぎ込まれた。

 そこには、単純にシェーダ性能を増やすだけの時代は終わり、ハイブリッドレンダリングの時代に入ったという、NVIDIAの認識が感じられる。

ハイブリッドレンダリングのテクニック
従来のPascalベースのGTXとTuringベースのRTXの比較
GPU Features GTX 1080Ti RTX 2080 Ti GeForce GTX 1080 GeForce RTX 2080 GeForce GTX 1070 GeForce RTX 2070
Codename GP102 TU102 GP104 TU104 GP104 TU106
Architecture Pascal Turing Pascal Turing Pascal Turing
GPCs 6 6 4 6 3 3
TPCs 28 34 20 23 15 18
SMs 28 68 20 46 15 36
CUDA Cores/SM 128 64 128 64 128 64
CUDA Cores/GPU 3,584 4,352 2,560 2,944 1,920 2,304
Tensor Cores/SM NA 8 NA 8 NA 8
Tensor Cores/GPU NA 544 NA 368 NA 288
RT Cores NA 68 NA 46 NA 36
GPU Base Clock MHz (Reference/Founders Edition) 1,480 / 1,480 1,350 / 1,350 1,607 / 1,607 1,515 / 1,515 1,506 / 1,506 1,410 / 1,410
GPU Boost Clock MHz (Reference/Founders Edition) 1,582 / 1,582 1,545 / 1,635 1,733 / 1,733 1,710 / 1,800 1,683 / 1,683 1,620 / 1,710
RTX-OPS (Tera-OPS) (Reference/Founders Edition) 11.3 / 11.3 76 / 78 8.9 / 8.9 57 / 60 6.5 / 6.5 42 / 45
Rays Cast (Giga Rays/sec) (Reference/Founders Edition) 1.1 / 1.1 10 / 10 0.89 8 / 8 .065 / .065 6 / 6
Peak FP32 TFLOPS (Reference/Founders Edition) 11.3 / 11.3 13.4 / 14.2 8.9 10 / 10.6 6.5 / 6.5 7.5 / 7.9
Peak INT32 TIPS (Reference/Founders Edition) NA 13.4 / 14.2 NA 10 / 10.6 NA 7.5 / 7.9
Peak FP16 TFLOPS (Reference/Founders Edition) NA 26.9 / 28.5 NA 20.1 / 21.2 NA 14.9 / 15.8
Peak FP16 Tensor TFLOPS with FP16 Accumulate (Reference/Founders Edition) NA 107.6 / 113.8 NA 80.5 / 84.8 NA 59.7 / 63
Peak FP16 Tensor TFLOPS with FP32 Accumulate (Reference/Founders Edition) NA 53.8 / 56.9 NA 40.3 / 42.4 NA 29.9 / 31.5
Peak INT8 Tensor TOPS (Reference/Founders Edition) NA 215.2 / 227.7 NA 161.1 / 169.6 NA 119.4 / 126
Peak INT4 Tensor TOPS (Reference/Founders Edition) NA 430.3 / 455.4 NA 322.2 / 339.1 NA 238.9 / 252.1
Frame Buffer Memory Type 11264 MB 11264 MB 8192 MB 8192 MB 8192 MB 8192 MB
Frame Buffer Memory Size and Type GDDR5X GDDR6 GDDR5X GDDR6 GDDR5X GDDR6
Memory Interface 352-bit 352-bit 256-bit 256-bit 256-bit 256-bit
Memory Clock (Data Rate) 11 Gbps 14 Gbps 10 Gbps 14 Gbps 8 Gbps 14 Gbps
Memory Bandwidth (GB/sec) 484 616 320 448 256 448
ROPs 88 88 64 64 64 64
Texture Units 224 272 160 184 120 144
Texel Fill-rate (Gigatexels/sec) 354.4 / 354.4 420.2 / 444.7 277.3 / 277.3 314.6 / 331.2 202 / 202 233.3 / 246.2
L2 Cache Size 2,816 KB f 2,048 KB 4,096 KB 2,048 KB 4,096 KB
Register File Size/SM 256 KB 256 KB 256 KB 256 KB 256 KB 256 KB
Register File Size/GPU 7,168 KB 17,408 KB 5,120 KB 11,776 KB 3,840 KB 9,216 KB
NVLink NA 2x8 NA 1x8 NA NA
NVLink bandwidth(bi-directional) NA 100GB/sec NA 50GB/sec NA NA
TDP (Reference/Founders Edition) 250 / 250 W 250 / 260 W 180 / 180 W 215 / 225 W 150 / 150 W 175 / 185 W
Transistor Count 12 Billion 18.6 Billion 7.2 Billion 13.6 Billion 7.2 Billion 10.8 Billion
Die Size 471mm2 754mm2 314平方mm 545平方mm 314平方mm 445平方mm
Manufacturing Process 16nm 12nm FFN 16nm 12nm FFN 16nm 12nm FFN