GeForce RTX 30-Series Tech SessionsでわかったAmpereが超進化した理由

文●加藤勝明(KTU) 編集●ジサトライッペイ/ASCII

2020年09月05日 06時00分

CUDAコアが前世代に比べ2倍以上の増加し、RTコアもTensorコアも刷新されたGeForce RTX 30シリーズ。GeForce RTX 3080は9月17日より販売解禁となる。なお、写真のFounders Editionの国内正式販売はない

 2020年9月2日、NVIDIAのCEO、ジェンスン・ファン氏は先日オンラインで開催した「GeForce Special Event」において、既存のGeForce RTX 20シリーズの性能をはるかに上回る(と主張する)「Ampereアーキテクチャー」と、それを採用した「GeForce RTX 30シリーズ」を発表した。非常に多くの内容を40分程度にまとめた超高濃度かつハイスピードなセッションだった。

 今回はそのGeForce Special Eventに続き、プレス向けに開催された「GeForce RTX 30-Series Tech Sessions」の内容の内、Ampereアーキテクチャーやその他注目度の高い機能について解説しよう。

NVIDIAが作成したGeForce RTX 30シリーズの“まとめ”的な画像。(1)性能の大幅向上、(2)GDDR6Xメモリー、(4)第2世代RTコア、(5)第3世代Tensorコア、(6)新たな低遅延機能「NVIDIA Reflex」、(7)ゲームのロード時間短縮が期待できる「RTX IO」、(8)8Kゲーミング向けの「RTX 3090」、(9)AIを利用した配信/ビデオ会議支援「NVIDIA Broadcast」、(10)RTXをクリエイティブ作業にさらに活かす、などが語られている

内部データパスが2倍になった内部構造

 まずはAmpereアーキテクチャーの概要から見ていこう。冒頭でも述べた通り、Ampereは前世代のTuringからCUDAコアを2倍以上に増やし、さらにRTコアとTensorコアに改良を加えることで、スループットを向上させている。

GeForce RTX 20シリーズ(Turing)はCUDAコアのほか、レイトレーシング処理の一部を担当するRTコアに、AI処理を担当するTensorコアの両方を備えているのがトピックだった

GeForce RTX 30シリーズ(Ampere)ではRTコアとTensorコアの世代を進め、すべての部位においてTuring世代よりも飛躍的な性能向上を果たした、とNVIDIAは謳う

 次に、GeForce RTX 3080全体の大構造を眺めてみよう。AmpereではCUDAコアが倍以上に増えているのが特徴だが、大構造(L2キャッシュ〜コアのクラスター〜メモリーコントローラーなど)はTuringから大きく変化していない。GeForce RTX 2080 SUPERとRTX 3080を比べると、メモリーバス幅が256bit→320bitに拡幅されたぶん、メモリーコントローラーが増えているが、大構造は似たようなものだ。

GeForce RTX 2080 SUPERで使われているTU104コアのブロック図(概念的なもの)。48基のSMのそれぞれに64基のCUDAコアが収まっている。メモリーコントローラーは32bit幅のものが8基なので、バス幅は256bitとなる

GeForce RTX 3080に使われている「GA102」コアのブロック図。SMは68基あり、各SMに128基のCUDAコアが格納されている。SMが10基のブロックと12基のブロックがあるので、すべて12基のブロックで構成された“GA102の完全体”(フルスペック)が今後出てくる可能性は十分考えられる

 しかし、コアのクラスターを構成するGPC(Graphics Processing Cluster)の内側に入っている小クラスター、すなわちSM(Streaming Multiprocessor)の構造は大きく変化した。SM1基の中に4つのパーティションがあり、その中にCUDAコアが入っているのは同じだが、Turingでは1パーティションあたりCUDAコアが16基だったのが、Ampereでは32基に増えている。

 さらにAmpereではこの32基のCUDAコアを2つのグループに分け、2つのデータパス上に並べている。データパスの1つはTuringと同じようにINT32かFP32オペレーションのどちらかを実行できるが、もうひとつのデータパスはFP32オペレーション専用となる。

 この構造のおかげでAmpereのSM内にあるパーティションは、32のFP32オペレーションの実行か、16のINT32オペレーション+16のFP32オペレーション同時実行のどちらかを選択できる。ひとつのデータパス内にINT32とFP32を混在させることはできない。つまり、全部INT32オペレーションの場合はCUDAコア数は実質半減してしまうことになるが、現実のゲームではFP32の処理が圧倒的に多いので、FP32専用のデータバスを用意したことは極めて理にかなった改善と言えるだろう。

 また、AmpereではSM1基ごとに設置されているL1キャッシュの容量を128KBに増量している。TuringのL1は96KBなので、ざっと33%の増量となる。

TuringにおけるSMの構造。CUDAコアはINT32とFP32の部分になるが、各々16基ずつあるもののINT32かFP32のどちらかしか同時に使えないため、INT32+FP32でCUDAコア1つとカウントされている

AmpereではFP32専用の部分と、INT32とFP32の共有の部分を別々のデータパスに載せ、同時に処理を走らせられる。ゆえに、CUDAコア数のカウントが単純に倍になっているのだ。L1データキャッシュ(兼共有メモリー)が128KBに拡張されている点にも注目

ちなみに、こちらは大原氏の記事にあるHPC向けAmpere「A100」のSM構造図。コンシューマー向けのAmpereにはないFP64が存在し、INT32とFP32でコアが分かれ、L1キャッシュも192KBと多い

モーションブラー処理もレイトレーシングで高速化

 AmpereではRTコアが第2世代に進化し、レイトレーシング性能を大幅に向上しているが、具体的には何が変化したのだろうか?

 Turingの時に解説済みだが、RTコアの役割はレイトレーシングの処理において最も計算負荷の高い「光線(レイ)がどのポリゴンに衝突するかの計算」を高速で処理することにある。もう少し細かく言えば、BVH(Bounding Volume Hierarchy)という階層構造を使ってレイが衝突しそうなポリゴンを効率良く絞り込む「バウンディング・ボックス・インターセクション」と、ポリゴンにどう衝突するかを計算する「トライアングル・インターセクション」の2つの処理(これをまとめてBVHトラバーサルと呼ぶ)がRTコアの役目だ。

 Ampereの第2世代RTコアでは、トライアングル・インターセクションに手を加えることで、モーションブラーの計算を高速化することが可能になった。動いているポリゴンに対してレイトレーシングのモーションブラーを処理する場合、そのポリゴンが次の瞬間、次の次の瞬間……でレイとどう衝突するか追跡した上で結果を出す必要がある。第2世代RTコアでは、トライアングル・インターセクションの前段でこの処理をハードウェア的に実行できるようになった、というものだ。

TuringのRTコア(左)とAmpereのRTコア(右)を比べると、後者ではトライアングル・インターセクションの前段にモーションブラーを高速化する機能を設けている

モーションブラーがない場合(左)は、単純にトライアングル(ポリゴン)にどう衝突したかを判定するだけ。対して、モーションブラーをかける場合(右)は、そのトライアングルがどう動いたかを考慮して計算する必要がある

モーションブラーをレイトレーシングで実現する場合(右)でも、レイを放ちトライアングルとの衝突を計算するが、ごく短い時間ごとにもレイを飛ばして計算する。図では黄色・緑・青の3回に亘ってレイを飛ばし、その瞬間のトライアングルとの衝突結果から、モーションブラーを作り出している

 ただし、モーションブラーはレイトレーシング処理の有無に関係なく負荷が高いため、ゲームではオフにしてしまうことが多い効果のひとつだ。そのため、レイトレーシングでこれを実装されてもゲーマーにはあまりメリットがなさそうではあるが、CGレンダリング目的なら非常に頼もしい進化点ではある。

第2世代RTコアは前世代に比べて最大8倍のレイの追跡が行なえるようになった。なお、この「最大8倍」とはモーションブラー適用時のことだろう

AmpereはTuringからレイトレーシング性能が向上したおかげで、「Arnold」や「Redshift」といった3Dレンダリングソフトのレンダリング速度も概ね2倍に高速化した

BlenderのCyclesレンダーでは、レイトレーシングのモーションブラー処理時間が劇的に短縮。グラフのグレー部分はモーションブラーを必要としない部分のレンダリング時間で、緑の部分がモーションブラーの処理時間を示している。グレーの部分はざっと2倍だが、緑の部分は5倍高速になった、と主張している

TensorコアはRTコアとの同時実行が可能に

 AmpereのTensorコアは第3世代のものが使われているが、主な強化点はスパースモデリングにも対応した、という点だ。ディープラーニングは多量の学習データが必要だが、十分な量のデータが用意できなければ役に立たない。スパースモデリングはSparse(まばらな)の意味から想像がつく通り、少ないデータから推論するための技法だ。スパースモデリングで処理をする場合、従来のデンスモデリングを使った処理よりも2倍のパフォーマンスが期待できる。ただし、このあたりで筆者の理解を超越してきたので、ここまでとしておきたい。

最初はデンスなデータでトレーニングし、枝刈り(Pruning)でスパースモデリングに移行。計算量が減るので処理が高速化できるというわけだ

Ampere(RTX 3080)のTensorコアはTuring(RTX 2080 SUPER)よりもSMあたりのコア数は減っているが、FP16の積和算が実行できる数はTuringよりも大きい。Tensorコア1基あたりで見ると、Turingが64オペレーションだが、Ampere(RTX 3080)はデンスなら128、スパースなら256オペレーションが実行できるという

 GeForce RTX 30シリーズを主にゲーミング用途で買う我々にとって、TensorコアはAIを使って低解像度のレンダリングから解像度の高いアウトプットを得る「DLSS」や、レイトレーシング時のAIデノイズ処理のためにあるコアだ。特にレイトレーシング処理をさせる場合は、RTコアとTensorコアを活用することで処理時間(フレームタイム)を短くできる、というのはTuring世代からもたらした概念だ。

 しかし、TuringではRTコアとTensorコアを同時に動かすことができないという制約を抱えていた。RTコアで処理し、しかるべき処理をした後でTensorコアに引き渡す必要があった。それに対して、Ampereではハードウェア的な改良を加えることで、RTコアとTensorコアの同時処理ができるようになった。このRTコアとTensorコアの同時処理がうまく使える程度にゲームが作り込んであれば、レイトレーシング使用時における性能低下もかなり軽減されるはずだ。今後のゲーム側の対応を注視したい。

レイトレーシングを使った1フレームをレンダリングするのに、CUDAコアだけを使うと51ミリ秒(≒19fps)かかるが、RTコアを使えば20ミリ秒(≒50fps)、RTコアとTensorコアを併用すれば12ミリ秒(≒83fps)「くらいになる」という主張

TuringではRTコアとTensorコアを使った時13ミリ秒かかるフレームが、Ampereで実行すれば7.5ミリ秒に短縮する。そして、RTコアとTensorコアの同時処理を使えば、6.7ミリ秒まで短縮するという

GeForce GTX 1080 Ti/RTX 2080/RTX 3080それぞれでレイトレーシングの処理をさせた時のフレームタイムをまとめたもの(数値の単位はミリ秒)。GeForce RTX 2080もRTX 3080もRTコアとTensorコアを使う(HW RT+DLSS)ことでフレームタイムを劇的に短縮できるが、Ampere世代のRTX 3080はRTコアとTensorコアを同時に動かせる(+Async)ので、Turingよりも最大1.9倍高速に処理ができる

GDDR6Xメモリーの採用とワットパフォーマンスの改善

 GeForce RTX 3090とRTX 3080にはGDDR6Xメモリーが使われる点もトピックだ。GeForce Special Eventの詳報記事でも書いた通り、GDDR6Xは2段階の電圧レベル(いわゆる0か1か)ではなく、4段階の電圧で情報をエンコードして転送する。結果、情報密度が上がるためより短時間で転送が終わるというわけだ。これを筆者がわかる範囲で補足しておきたい。

GDDR6が使う波形(左)は電圧がゼロか、電圧がかかっているかの2値のみなのに対し、GDDR6X(右)は4段階の電圧を使用するPAM4シグナリングが使われる。同じデータを送信するのにGDDR6が500ピコ秒かかるところを、GDDR6Xなら380ピコ秒で終わるという図だ

 GDDR6Xで扱うシグナルを波形として見ると次のような図になるが、単純に2ビットの情報を4段階の電圧に変換しているわけではない。“眼”のようなスペースが広くキレイに出現するよう設計する必要があり、目頭や目尻に相当する部分はシグナルが0とも1ともとれる場所となる。なので、はっきりと電圧があるかないかのポイントが必要になり、微妙な4段階の電圧を区別しなければならない。

 そこで、GDDR6Xでは眼のパターンがキレイに出た瞬間で電圧を判定するアルゴリズムを採用するほか、電圧の両極端から両極端へ飛ぶようなシグナルを禁じている。一番下の電圧レベルから一番上の電圧レベルへ飛べば、電圧が上がりきるまで時間がかかる。結果として眼の開口部が狭くなってしまうからだ。このあたりの細かい解説は、いずれ大原氏の連載でやってくれると思うので、襟を正して待ちたい。

GDDR6Xで採用されている技術。中央の「Max Transitin Avoidance Coding」が、両極端な電圧レベルへの遷移を禁じてシグナルのクオリティーを保つためのテクニックだ

波形をよく観察すると、電圧レベルの変動は±2レベルに制限されていることがわかる。図は筆者が「こんな感じでは」と線を引いてみたものなので、あくまで参考程度に

仮にMax Transitin Avoidance Codingがなく、両極端な電圧レベルへの遷移があるとこんな感じになり、眼の開口部が狭くなってしまうことがわかる

 ワットパフォーマンスの改善については、実のところあまり多くは語られなかった。単純にパフォーマンスが2倍になったのでワットパフォーマンスが2倍という雑な計算のようにも思えるが、一応設計レベルでも工夫されているようだ。具体的にはGPUのコア部分とメモリーまわりの回路部分で電力のレールが分けられている、とのこと。だがそれ以上の情報は公開されなかった。

右の図でGPUのコア部分とメモリーまわりで電力の系統が分かれていることを言いたいようだ。左の図はGeForce Special Eventで示されたものに具体的な数値が入ったものだが、同程度の温度ならAmpereはTuringの2倍近いフレームレートを出せるようだ。ただし、TGP(Total Graphics Power)は240W→320Wに増えているので、相応の消費電力は覚悟するべきだろう

次回はRTX IOとNVIDIA Reflexに迫る

 今回のGeForce RTX 30-Series Tech Sessionsレポートはこのあたりにしておこう。次回は最も興味を惹かれる(しかし実用化にはまだ時間が必要な)「RTX IO」、そしてeスポーツの世界を変えてしまう予感もする「NVIDIA Reflex」について迫りたい。

■関連サイト

■関連記事