ここから本文です

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

9/14(金) 22:00配信

Impress Watch

 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に迫る。

 本来の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にとどまることで、ダイを大きくしても歩留まりを上げる選択を行なったと見られる。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 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は、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浮動小数点演算と整数演算を平行して実行することができる。

 また、各サイクルに発行される命令は、それぞれ異なる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の積和算が可能だ。

 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はクライアントであるため、推論に力点があり、推論で多用される低数値精度が強化された。

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

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

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

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

 細かなデータは公開していないが、同等品質のアンチエイリアシングを実現するために必要な性能を、負荷の高い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はシェーダ性能も向上していると説明する。

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

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

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

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

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

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

 この仕組みが、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を分割して、異なる用途に振り分けることができる。

 伝統的なグラフィックスワークロードでは、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となっている。

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

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

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

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

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

■高速インターコネクト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の帯域となる。

 グラフィックス向け製品である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の認識が感じられる。

PC Watch,後藤 弘茂 (Hiroshige Goto)

最終更新:9/14(金) 22:22
Impress Watch

あわせて読みたい