お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2020/09/14 12:03

連載

西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

画像集#002のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ
 去る9月2日,NVIDIAは,オンラインイベント「GeForce Special Event」を行い,新世代GPU「GeForce RTX 30」シリーズを発表した。発表となったGPU製品は「GeForce RTX 3090」「GeForce RTX 3080」「GeForce RTX 3070」の3種類で,2018年8月に発表となった「GeForce RTX 20」シリーズの後継製品となる。

 本稿では,GeForce RTX 30シリーズのアーキテクチャについて詳しく解説してみよう。


Ampere世代のGPUアーキテクチャを検証する


Ampere初のGPUである「GA100」を搭載するモジュール
画像集#003のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ
 今回発表となったGeForce RTX 30シリーズは,「Ampere」(アンペア)アーキテクチャを採用したGPUである。
 Ampereは,2020年5月に登場した「GA100」が最初の製品なのだが,同GPUにはレイトレーシング向け演算ユニットである「RT Core」や,ビデオ処理プロセッサ「NVENC」を搭載しておらず,事実上,科学技術計算や人工知能開発用途などに向けた「GPGPU専用GPU」という位置づけであった。

 それに対して今回発表となったGPUは,同じAmpereアーキテクチャではありながら,RT CoreやNVENCを搭載しており,なおかつシェーダプロセッサたるCUDA Core(事実上の32bit浮動小数点演算器)の数も増やしたグラフィックスカード向けのGPU製品となっている。
 なお,今回発表となったGeForce RTX 30シリーズのGPUコアは,GeForce RTX 3080と最上位のGeForce RTX 3090が開発コードネーム「GA102」,GeForce RTX 3070は同様に「GA104」となっている。

GeForce RTX 3080を搭載する「GeForce RTX 3080 Founders Edition」のメイン基板とGPUパッケージ
画像集#029のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 基本スペックは表1のとおり。

表1 GeForce RTX 30シリーズの主なスペック
GeForce RTX 3090 GeForce RTX 3080 GeForce RTX 3070
開発コードネーム GA102 GA102 GA104
GPUアーキテクチャ Ampere Ampere Ampere
製造プロセス技術 Samsung 8nm Samsung 8nm Samsung 8nm
トランジスタ数 280億 280億 174億
ダイサイズ 628mm2 628mm2 392mm2
GPC数 7 6 4
SM数 82 68 46
CUDA Core数 10496 8704 5888
TPC数 41 34 23
RT Core数 82 68 46
Tensor Core数 328 272 184
テクスチャユニット数 328 272 184
ROP数 112 96 64
ベースクロック 未公開 未公開 未公開
ブーストクロック 1695MHz 1710MHz 1725MHz
CUDA Core理論性能値(FP32) 35.58 TFLOPS 29.77 TFLOPS 20.37 TFLOPS
Tensor Core理論性能値(Dense FP16) 142.33T TensorFLOPS 119.07T TensorFLOPS 81.49T TensorFLOPS
メモリタイプ GDDR6X GDDR6X GDDR6
メモリインタフェース 384bit 320bit 256bit
メモリクロック 19.5GHz 19GHz 14GHz
メモリバス帯域幅 936GB/s 760GB/s 448GB/s
メモリ容量 24GB 10GB 8GB
※一部は筆者による推定値

 GA102のトランジスタ数は,約280億で,ダイサイズは628mm2だ。5月発表のGA100は,トランジスタ数が約542億で,ダイサイズは826mm2だったので,チップサイズおよびチップの規模的には,依然としてGA100が世界最大の称号を維持したままとなる。

 受託製造を行っているのはSamsungで,プロセスルールは8nmであるという。ちなみに,Samsungの8nmプロセスは,10nm LPP(Low-Power Plus)をマイナーチェンジしたものとのことだ。
 Samsungのプロセスを採用した理由を,オンラインでの説明会でNVIDIA側に質問してみたが,「製造に最適な製造ファブを採用しただけだ」とはぐらかされてしまった。GPGPU向けのGA100は,TSMCの7nmプロセスで製造しているので,納期とコストのバランスでSamsungのプロセスを採用したということだろう。

 さて今回は,GA102とGA104という2種類のGPUが発表となったわけだが,まずはハイエンドのGA102から見ていくとしよう。
 GA102のブロックダイアグラムは,以下のようになっている。

GA102のフルチップブロックダイアグラム
画像集#004のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 CPUで「コア」に相当するミニGPUクラスタ「Graphics Processor Cluster」(以下,GPC)は,見てのとおり7基ある。奇数構成は少々考えにくいので,実際は8基構成という可能性はあるのか,と思いNVIDIAに確認したところ「GPCは7基である」という答えだった。先だって発表となったGA100は,GPC 8基構成でありながら,歩留まり対策のためにGPCを1基分を無効化していたのだが,これとは異なるというわけだ。
 なお,GA100では,GPU仮想化技術を効率化するために,GPCを仮想的な単体GPUとして利用できる「Multi-Instance GPU」(MIG)機能を有していたが,NVIDIAに確認したところ,GA102は同機能を搭載していないとのことだった。

 さて,NVIDIAのGPUは,前出の「コア」に相当するGPCの中に,演算器であるCUDA Coreを集積してクラスタ化した「Streaming Multiprocessor」(以下,SM)を複数搭載している。NVIDIAは,SMの搭載数をGPU世代ごとに変えてくるのだが,GA100ではGPC 1基あたりSMが16基だったのに対して,GA102では12基となっている。

GA102におけるGPUを拡大したところ。SMは12基ある
画像集#006のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

GA102におけるSMのブロック図。CUDA Coreの半数は,INT32またはFP32演算器として機能する
画像集#005のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ
 しかし,SM 1基あたりのCUDA Core数は,GA100よりもGA102のほうが多いのが興味深い。具体的には,GA100ではSM 1基あたりCUDA Coreは64基だったのに対して,GA102では,SM 1基あたりCUDA Core数は2倍の128基となっているのだ。しかも,128基の半分にあたる64基のCUDA Coreは,32bit浮動小数点(FP32)演算器としてだけでなく,排他的に32bit整数(INT32)演算器として機能させることもできる。
 もともとGA100では,SM 1基あたり「INT32×64基+FP32×64基」という構成だったが,GA102では「(INT32 or FP32)×64基+FP32×64基」という構成になったという理解でいい。なお,INT32演算では,整数演算以外に論理演算や各種アドレス計算,フロー制御(GPUの場合はPredication処理,いわゆる条件付き実行制御)などを担当する。

 以上を踏まえると,GA102におけるCUDA Coreの総数は,

  • 7 GPC×12 SM×128 CUDA Core=10752

ということになる。
 CUDA総数とSM 1基あたりのCUDA数の変遷をまとめた表2を下に示しておこう。

表2 NVIDIA製GPUにおけるSM内のCUDA Core数
世代 GPU名 CUDA core総数 SM 1基あたりのCUDA core数
Tesla GT200 240 8
Fermi GF100 512 32
Kepler GK104 1536 192
Maxwell GM200 3072 128
Pascal GP102 3840 128
Volta GV100 5120 64
Turing TU102 4608 64
Ampere A100 8192 64
Ampere GA102 10752 128

 続いては,テクスチャアクセス性能を推測するのに都合のいいCUDA Core数とTPC数の関係も見ておこう。

 なお,TPCとは「Texture Processing Cluster」の略で,大雑把に言えばテクスチャユニットにあたるものだ。ただ,シェーダプロセッサ(CUDA Core)が必要な各種データ――グラフィックス処理では,主にテクスチャデータ――をアクセスするときの小難しいアドレス計算や読み書きするデータの成形処理までを行ってくれる。たとえば,視線の角度に応じてアクセス対象のMIP-MAPレベルとテクスチャ座標を適宜変更しなければならない異方性テクスチャフィルタリングなどに,TPCを活用している。

 というわけで,各世代のNVIDIA製GPUにおける「SM1基あたりのCUDA Core数とTPC数の関係」をまとめた表が下だ。

表3 SM 1基あたりのCUDA Core数とテクスチャユニット数
GPU名 CUDA core数 テクスチャユニット数 CUDA core数:
テクスチャユニット数
Tesla GT200 8 8 1:1
Fermi GF100 32 4 8:1
Kepler GK104 192 16 12:1
Maxwell GM200 128 8 16:1
Pascal GP102 128 8 16:1
Volta GV100 64 4 16:1
Turing TU102 64 4 16:1
Ampere A100 64 4 16:1
Ampere GA102 128 4 32:1

 興味深いことに,GA102ではSM 1基あたりのCUDA Core数は128基となったことで,Maxwell世代やPascal世代のバランスに戻っている。また,Maxwell以降は16:1となっていた演算能力とテクスチャ性能のバランスが,GA102では,歴代最高の演算能力重視になっているのが興味深い。


GeForce RTX 3090,3080の構成


 今度は,実際にGeForce RTX 3080およびGeForce RTX 3090として発表となったGPUは,どのような構成となっているのかを見ていくことにしよう。

 GeForce RTX 3080の総CUDA Core数は8704基で,GeForce RTX 3090は10496基であるが,前掲のフルチップブロックダイアグラムをよく見ると,全部で10752基のCUDA Coreがある。現時点で最上位のGeForce RTX 3090が有するCUDA Core数よりも多いわけだ。つまり,GA102の生産が安定した場合には,10752基のCUDA Coreを有効化した「SUPER」やら「Ti」モデルが登場する余地があることを意味する。

 なお,GeForce RTX 3080はブロックダイアグラムが公開されていて,GPCが1基分無効化されたGPC 6基構成となっていた。さらに,GPCのうち4基分はSM数が12基の構成だが,残るGPC 2基分はSM数が10基という構成である。つまり,

  • (128 CUDA Core×12 SM×4 GPC)+(128 CUDA Core×10 SM×2 GPC)=8704

となるわけだ。

GeForce RTX 3080のブロックダイアグラム
画像集#007のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 一方,GeForce RTX 3090の構成はどうなっているのか。NVIDIAに確認したところ,GPC 6基分はSM 12基の構成であるが,残るGPC 1基分だけはSM 10基としているそうだ。つまり以下のようになる。

  • (128 CUDA Core×12 SM×6 GPC)+(128 CUDA Core×10 SM×1 GPC)=10496

 以上を踏まえて,GeForce RTX 3080,GeForce RTX 3090の理論性能値を計算してみよう。

GeForce RTX 3080
  • 8704×2 OPS×1710MHz=29.77 TFLOPS

GeForce RTX 3090
  • 10496×2 OPS×1695MHz=35.58 TFLOPS

 それぞれ,公称値の約30TFLOPS,約36TFLOPSに近い結果だ。
 GA102が驚きの性能を実現した直接の要因は,いうまでもなく8nmプロセスルールの採用にともなうCUDA Core数の増量に他ならない。なお,意外なことに,GeForce RTX 30シリーズの動作クロックはブーストクロックで約1.7GHz前後と,12nmプロセス世代のGeForce RTX 20シリーズと比べて,あまり大きな変化はない。

 さて,前述したようなフルスペック版GA102を使ったSUPERモデルが出るとしたら,どのようなものになるのか。Turing世代の場合,TU100系チップの製造が安定したあとで登場したRTX 20 SUPERシリーズでは,動作クロックが約10%向上していた。これを取り入れると,

  • 10752×2 OPS×1850MHz=39.78 TFLOPS

となり,約40TFLOPSが見えてくることになる。もちろん,実際にそうした製品が登場するかは分からないが,ゲームグラフィックス向け単体GPUが,ついに40TFLOPSの大台に到達するというのは感慨深い。


GeForce RTX 3070の構成を推測してみる


画像集#008のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ
 下位モデルのGeForce RTX 3070,開発コードネーム「GA104」についても見ておこう。
 GA104のブロックダイアグラムは公開されておらず,構成を推測できる情報として以下の項目が明らかになっている。

  • 総CUDA数は5888
  • GPCは4基

 SM内部の構成はGA102と同じなので,GA104のフルチップ仕様は以下のようになると計算できる。

  • 128 CUDA Core×12 SM×4 GPC=6144

 つまりGeForce RTX 3070も,歩留まり対策としてGPC内のSMを2基分(=CUDA Core 256基分)無効化している製品ということだ。
 4基のGPCから5888基のCUDA Coreを有効化する組み合わせとしては,GPCの1基からSMを2基無効化するパターンと,GPC 2基からそれぞれSM 1基分を無効化するパターンが考えられよう。

GPC 1基からSM 2基を無効化するパターン
  • (128 CUDA Core×12 SM×3 GPC)+(128 CUDA Core×10 SM×1 GPC)=5888

GPC 2基からSM 1基ずつを無効化するパターン
  • (128 CUDA Core×12 SM×2 GPC)+(128 CUDA Core×11 SM×2 GPC)=5888

 いずれにせよ,GeForce RTX 3070にも6144基のCUDA Coreを有効化したSUPERやらTiやらが登場する可能性はあると考えられる。

 さて,そんなGeForce RTX 3070の理論性能値だが,

  • 5888×2 OPS×1725MHz=20.31 TFLOPS

となり,こちらも公称値の約20TFLOPSと一致する。もし,近い将来にフルSM版×動作クロック10%向上が出るとしたら,こんな感じだろうか。

  • 6144×2 OPS×1900MHz=23.35 TFLOPS

となる。値としてはなかなかリアルだ(笑)。


AmpereのSMをもう少し細かく見てみる


GA102におけるSMのブロック図
画像集#005のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ
 続いては,もう少し詳しくSMの内部について見ていこう。
 なお,SMのブロック図は現物とは違なる部分があるので,説明が必要だろう。

 先述したように,GA102(およびGA104)のSMには,演算ユニットたるCUDA Coreが128基詰め込まれているが,その半分である64基のCUDA Coreは,32bit浮動小数点(FP32)演算器としてだけでなく,排他的に32bit整数(INT32)演算器として機能する能力が与えられている。

 一方,ブロック図を見た範囲では倍精度浮動小数点(FP64)の演算器は見当たらないが,これはTuringと同様で単純な記載漏れ,あるいは省略のはずだ。実際には,SM 1基あたり2基のFP64演算器を実装している。
 GPGPU用ではないGeForceブランドのGPUは,一部の例外を除いてFP64の演算性能は,

  • FP32演算性能:FP64演算性能=32:1

という比率だった。それが今回,FP32演算器が倍増したため,GA102では,

  • FP32演算性能:FP64演算性能=64:1

という比率となった。
 NVIDIAによると,GeForceブランドへのFP64演算器搭載は,事実上「FP64 Tensor コードを含むすべてのFP64命令への互換性を保つため」であるため,ここで特段に高性能を謳ってはいない。

 グラフィックスメモリとの読み書きを司る「ロード/ストア」(LD/ST)ユニットや,三角関数や指数関数を処理する「超越関数」(SFU)ユニットの構成は,Turing世代から変更はない。SM 1基あたりの数も同じだ。
 Turing世代と比較したときに目に付く変更点は,L1キャッシュの容量拡大だろうか。Turingアーキテクチャの場合,L1キャッシュは,共有メモリと兼用仕様になっていて,総容量は96KBだった。また,L1キャッシュと共有メモリの構成は64KB+32KBか,32KB+64KBの二択でとなる。これがGA102では128KBへと拡大したことで,L1キャッシュと共有メモリの構成パターンは64KB+64KBか96KB+32KBの組み合わせが選択できるようになった。

 ただ,GPGPU専用のGA100では,L1キャッシュが164KB(160KB+4KB,4KBは後述するAsync Copyの補助用)となっていたので,GA102はGA100よりも,むしろGPGPU専用だったVolta世代「GV100」の構成に近い。

左はTuring世代のTU102,右はVolta世代のGV100におけるSMのブロック図
画像集#009のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ 画像集#010のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 今回の発表イベントや,その後に行われた報道関係者向け説明会で,NVIDIA側が言及することはなかったが,Ampere世代のGA100登場と同時に発表となった「CUDA11」に,GA102は当然対応する。ゆえに,CUDA11の目玉新機能である「Asynchronous Copy」(非同期コピー,以下 Async Copy)にも対応するわけだ。
 非同期(Async)のコピー(Copy)とは,あるデータセットが処理中であっても,その処理終了を待つことなくGPU側がGPGPU処理系に対して,次に流し込むべきデータセットの準備を行える機能である。詳細の説明は割愛するので,興味のある人は,GA100の解説記事を参照してほしい。


RTX IOはDirectStorageのアクセラレーションレイヤに相当


 さて,このAsync Copyと関係の深い新機能が,GeForce RTX 30シリーズの発表とともにアナウンスされた。それが「RTX IO」だ。
 結論から述べてしまうと,RTX IOは,MicrosoftがGeForce RTX 30シリーズ発表のタイミングで発表したDirectXの新機能「DirectStorage」(関連リンク)と関係が深い機能だ。端的に言えば,「MicrosoftのDirectStorageをGPUでアクセラレーションする仕組みが,RTX IOである」という理解でいい。

 RTX IOを理解するためには,大前提となる「DirectStorageとは何か」に触れておかねばなるまい。
 2020年末には,次世代ゲーム機として「PlayStation 5」と「Xbox Series X」が発売となるが,「SSDから圧縮されたままのデータを読み出して,専用チップで展開したうえで,転送先のアドレス空間にDMA転送する仕組み」を実現するユニークなストレージシステムを,両製品ともが申し合わせたように採用したことを知っている人も多いかと思う。DirectStorageは,まさにこれのPC版(DirectX版と言うべきか)だ。

 DirectStorageにおいて,「圧縮データを専用チップで展開」の部分をどう処理するかについては,PCのハードウェア仕様に委ねられている。つまり,展開処理はCPU処理で行ってもいいし,GPGPUで行ってもいいし,次世代ゲーム機のように専用プロセッサで行ってもいい。

 次のスライドは,DirectStorageをCPUベースで実装したときのパイプライン図だ。ストレージからデータがSystem Memory(メインメモリ)に読み込まれ,そのデータをCPUがアクセスしてメインメモリ上で展開したうえで,GPU Memory(グラフィックスメモリ)に転送している。
 図の右側にあるグラフのようなものは,「もしデータが圧縮されていたら,その展開を高速に行うために,24コア分のCPUを使う必要だってあるかもしれない」という概念を示したものだ。ただ,必ずしもこうなるというわけではない。要はNVIDIAお馴染みの「CPUディスり芸」であるが,あながち的外れというわけでもない。

DirectStorageをCPUベースで実装したときのパイプライン図
画像集#011のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 このDirectStorageに対して,NVIDIAは,GeForce RTX 30シリーズにおいて,GPGPUで処理するソリューションを選択した。それがRTX IOというわけである。
 次のスライドは,DirectStorageをGA102で実装したときのパイプライン図だ。ストレージから直接GPUに圧縮データが転送され,オンザフライで展開したうえでGPUメモリに伝送する。圧縮データの展開はGPGPUで行うわけだ。スライド右に「Asynchronously Scheduled」(非同期スケジューリング)の記述にも注目してほしい。

DirectStorageをGA102で実装したときのパイプライン図
画像集#012のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 なお,NVIDIAによれば,RTX IOはAmpere世代GPUだけの機能ではなく,Turing世代以降のGPUで利用可能だという。ただ,ストレージから読み出された圧縮データを逐次GPUへ転送するストリーミング転送で,Ampere世代のGPUであれば,Async Copyが利用できる。
 Async Copyでは,

  • 前段のGPGPU処理が終わるのを待つことなく,非同期に次のGPGPU処理を開始できる
  • キャッシュバイパス制御/ライトバックキャンセル制御

といった機能が利用できるので,既存のGeForceと比べて,GA102世代はDirectStorageの実効パフォーマンスで優れるはずだ。


進化したレイトレーシングユニット


 「GeForce RTX 30シリーズでは,ハードウェアレイトレーシング機能を司るRT Coreの性能が劇的に向上した」とNVIDIAは猛烈にアピールしている。
 とはいえ,まだまだレイトレーシングの概念は,ゲーマーの間に十分浸透したとは言い難いので,本稿でも軽くおさらいしておこう。

 レイトレーシングとは,あるピクセルの色を計算するとき,そのピクセルが受け取っているはずの光の情報を得るために,光線(ray,レイ)を射出してたどる(trace)処理のことを指す。
 光線の射出方向と角度は,得たい情報の種類によって決まる。たとえば,ピクセル(に対応するオブジェクト面)から光線を射出して,その光線が近くの光源に到達するなら,ピクセルはその光源に照らされていることが分かる(図の1-a〜1-c)。
 一方,光源に達する前にほかの3Dオブジェクトと衝突すれば,そのピクセルは3Dオブジェクトの影になっていることが分かる(図の2-a〜2-c)。さらに,当該ピクセルを見つめるユーザーの視線が3Dオブジェクトに反射した方向に光線を射出して,それがさらにほかの3Dオブジェクトに衝突したとしたら,そのピクセルには「衝突した3Dオブジェクトが映り込んでいる」と判断できる
(図の3-a〜3-c,関連記事)。

レイトレーシングの概念図。図では光線をロケットのイラストで置き換えている
画像集#013のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 RT Coreが担当するのは,レイトレーシングにおける光線の生成処理と,光線を動かす「トラバース」(Traverse,横断)処理,そして衝突判定を行う「インターセクション」(Ray-Triangle Intersection,交差)判定である。
 先述したとおり,5月に発表となったGPGPU専用の「GA100」は,RT Coreを搭載していないとNVIDIAは公言していたが,今回のGA102やGA104は,ちゃんと搭載しているわけだ。GA102とGA104のRT Core数は,SM 1基あたり1基なので,GeForce RTX 3090,3080,3070のRT Core数は,それぞれSMの数と同じ82基,68基,46基となる。

 今のところNVIDIAは,GeForce RTX 30系RT Coreの性能公称値における目安として,「GeForce RTX 3080(GA102)の三角形との交差判定レートは,GeForce RTX 2080 SUPER(TU102)の2倍になった」と明らかにしている。ここで言う「2倍」の意味は簡単だ。GA102(およびGA104)のRT Coreが備える三角形との交差判定ユニットはデュアルパイプライン構造となっているので,並列処理できるようになったことが大きな要因だ。
 なお,一部のメディアで「三角形との交差判定がモーションブラーに対応したために性能が向上した」という記述も見られたが,これは間違いである。

 順を追ってこのあたりを解説しよう。
 現代的なレイトレーシング技術では,三角形の交差判定を高効率に検出するために,「Bounding Volume Hierarchy」(以下,BVH)と呼ばれる構造で3Dオブジェクトを管理している。BVHとは,その3Dモデル全体を覆うことができる最小体積の直方体(BOX)のことだ。この直方体は,3D座標軸に平行,垂直な向きに揃えられた「Axis Aligned Bounding Box」(以下,AABB)構造になっており,こうした構造体を「Acceleration Structure」(以下,AS)と呼ぶ。

レイを推進させたらそのレイと衝突している直方体を検出する。BVHは,この直方体の階層構造なので,レイと衝突している最下層の直方体までをたどり,最終的に最下層の直方体に含まれるポリゴンとの衝突判定を行う
画像集#014のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 さて,次のスライドは,RT Coreのブロックダイアグラムで,左がTuring世代,右がAmpere世代のRT Coreを示す。

RT Coreの新旧を比較したダイアグラム
画像集#015のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 RT Coreでは,「BVH Traversal」で「レイの生成」と「レイの推進」処理を担当する。レイの推進処理は事実上,リスト構造への探索のようなものだ。そして,推進したレイとAABBとの衝突判定を行うのが,パイプラインの上段にある「Bounding box intersection」ユニットだ。
 最下層のAABBと衝突したときに呼び出されるのが「Triangle intersection」で,ここで三角形との衝突判定を行う。ここはシンプルではあるが幾何学的な計算を行う。

 左側にあるTuring世代のRT Coreは,Triangle Intersectionが1つだけだが,スライドをクリックしてよく見ると,Ampere世代のRT Coreではここが2つ重なっているのが分かるだろう。そう,これが「三角形との衝突判定」パイプラインの並列化を意味している。これにより,2つのパイプラインが個別にレイと三角形の衝突判定を計算できるので,Turing世代のRT Coreに対して2倍の性能があるというわけだ。

 注目すべき点はもう1つある。Ampere世代のRT Coreをよく見ると,中央付近に「Interpolate tri position(Time)」というユニットが新設されていることが見て取れよう。これは,「投射したレイと三角形の衝突」を計算するときに,「特例事項を容認,介入させるユニット」になる。
 何を容認するかというと,イメージ的には「レイとの当たり判定をゆるくすること」だ。たとえば,衝突対象の三角形に「運動(移動)している属性」が付けられているとき,Interpolate tri position(Time)ユニットは,その三角形の速度パラメータから逆算で(投射計算して)過去の位置(あるいは未来の位置)を算出する。これにより,後段のTriangle intersectionで,衝突判定がゆるくなった三角形との衝突も取れるようになった。

Interpolate tri position(Time)ユニットが効果的に働くと,移動体に対して少ないレイ予算で衝突を判定できるため,品質の高い動体表現ができる
画像集#016のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 なぜ当たり判定をゆるくする必要があるのかと言うと,現実世界とは違い,現在のレイトレーシングでは,3Dシーン(正確にはBVH構造体)へ投げられるレイの数が有限で,高速移動体とレイの衝突判定をミスする場合があるためだ。しかし,衝突判定をゆるくする補間ユニットがあれば,今までは衝突をミスしていたかもしれない三角形と,正しく衝突を判定できるようになるのだ。
 「衝突判定をゆるくして三角形との衝突を判定することに,何のメリットがあるのか?」と疑問を持つ人もいるだろう。たとえば,現在のレイに対して,1秒前にそこに存在した移動体の三角形との衝突が取れたとする。その三角形は,現在にはその場所に存在しないのだから,それは残像というわけだ。残像というのは「うっすら見えるモノ」である。であれば,その三角形をライティング,シェーディングしたうえで,うっすらと描いてやればモーションブラーのできあがり。そんなイメージでいいだろう。

 結果として,Interpolate tri position(Time)ユニットのおかけで,Turing世代のRT Coreでは衝突を判定できなかったかもしれない移動体の描画品質を上げられることが期待できるわけである。

NVIDIAによると,「モーションブラー効果をともなうような高速移動体の衝突(交差)判定は8倍まで向上した」そうだ
画像集#017のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 「だったら,ゲームでは3Dオブジェクトが動くし,これでレイトレを使ったゲームグラフィックスも加速しそうだね」と期待されそうだが,今のところはそうなりそうにない。というのも,Interpolate tri position(Time)ユニットを,現在のDirectX Raytracingから使う手段がないからだ。Interpolate tri position(Time)ユニットは,NVIDIAがオフラインレンダリング向けのレイトレーシングエンジンフレームワークとして提供している「OptiX」から使うことになる。
 OptiXでは,移動体として「Motion acceleration structure」が定義できるので,Interpolate tri position(Time)ユニットは,こうしたオブジェクトに対するレイトレーシングに有効ということなのだろう。


Tensor CoreはGA100のものとよく似ている


 次に,AmpereにおけるAIアクセラレーション,具体的には推論アクセラレータ「Tensor Core」について見ていくことにしよう。

再掲となるが,左はAmpere世代のGA102,右はTuring世代のTU102におけるSMのブロック図
画像集#018のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ 画像集#009のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 GA102(およびGA104)のTensor Coreは,SM 1基あたり4基あるので,総数はSMの個数×4倍となる。Turing世代はSM 1基あたりTensor Coreは8基だったので,数は減少しているように思える。しかし実際の演算性能は,Turing世代のそれを上回る。

 その理由をシンプルに答えれば,「GA102はAmpere世代GPUなので,Tensor Coreは,GPGPU専用であるGA100のアーキテクチャを継承した新世代のものだから」ということになる。
 Turingが搭載していた第2世代Tensor Coreでは,Tensor Core 1基あたり16bit半精度浮動小数点(FP16)数の積和算(FMA,Fused Multiply-Add)を1クロックに64並列で演算できた。GPGPU専用のGA100では,これを4倍に高めた256並列で演算できたのだが,グラフィックス描画用のGA102では,これよりも控えめの128並列で演算できる。

Tensor Coreの新旧比較。GA102のTensor Core(右)は,GPGPU専用GPUのGA100(中央)と機能的には同等だ。ただ,演算並列度はTU102(左)の2倍で,GA100の半分である
画像集#019のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 並列度はGA100に対して控えめとなったGA102だが,Tensor Coreの機能自体はGA100とまったく同等で,Turing世代のTensor Coreにはなかった「疎行列」(Sparse Matrix)に対応したのが大きなトピックだ。詳細はGA100の解説を参照してほしいが,簡単に説明しておこう。

 疎行列とは,スパース行列とも呼ばれるもので,行列の要素にゼロが多く含まれるものだ。ゼロに対する積算はゼロになるので,ゼロの加減算は演算を行うこと自体が無意味となる。こうした演算に対する最適化を施したのが,Ampere世代のTensor Coreというわけだ。
 この疎行列は,機械学習や深層学習においてよく登場する。多層のニューラルネットワークにおいて,対象とする学習テーマによっては,特定のノード間における接続が不要であると分かった場合に,そのノード接続を無効化しても問題ない場合が多い。これを「枝刈り」(Pruning,プルーニング)と呼ぶが,プルーニングを行ったニューラルネットワークでの畳み込み演算には,疎行列が頻繁に登場するのだ。

プルーニングのイメージ。左がプルーニング前で,右がプルーニング後となる。緑色の丸がノードを,矢印はノード間の接続を示す。灰色の点線で描かれているのは,プルーニングによって無視されたノードと接続で,演算量が減らせる
画像集#020のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 Ampere世代のTensor Coreは,疎行列に対する演算性能が通常行列に対するのと比べて2倍となっており,この特徴はGA102も同様である。

Ampere世代のTensor Coreにおける疎行列演算の扱い方を示した図。紫色で描かれた4bitのインデックス(Non-zero indices)が,疎行列のゼロではない値の位置を表す
画像集#021のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

Ampere世代のTensor Coreが対応する新数値形式
画像集#022のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ
 また,GA100の解説でも紹介したので詳細は割愛するが,Ampere世代のTensor Coreは,機械学習系AIのデータ表現に都合のいい,精度よりもダイナミックレンジ重視な新しい数値形式にも対応している。具体的には「BF16」「TF32」の2つだ。それに加えて,Ampere世代のTensor Coreは,Turing世代のTensor CoreがサポートしていたFP64,FP32,FP16,INT8,INT4,INT1(バイナリ)にも対応する。

Ampere世代のTensor Coreは,2つのFP16演算か,2つのBF16演算を同時にこなせる設計となっている
画像集#023のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ
 念のために,GeForce RTX 3090,3080,3070におけるTensor Coreの演算性能を,通常のFP16,つまり疎行列扱いではない密な(Denseな)FP16の理論性能値で計算してみよう。
 まず大前提となるGeForce RTX 3090,3080,3070のTensor Core数だが,総SM数の4倍に相当する328基,272基,184基である。
 Tensor Coreの新旧比較スライドにある「FP16 FMA operations per Tensor Core」の項目を見ると,GA102は「Dense:128」並列とあるので,計算式は簡単に求められる。なお,FMAは積和算なので2 FLOPSだ。

GeForce RTX 3090
  • 328基×1695MHz×128並列×2 FLOPS=142.33T TensorFLOPS

GeForce RTX 3080
  • 272基×1710MHz×128並列×2 FLOPS=119.07T TensorFLOPS

GeForce RTX 3070
  • 184基×1725MHz×128並列×2 FLOPS=81.25T TensorFLOPS

 ちなみに,NVIDIAの公称値は,きっちり上記の値の2倍になっているが,公称値は疎行列(Sparse)の理論性能値を示しているためだ。Turing世代のTensor Coreとの性能値を比較する資料でもこの手口を使っているのは,ちょっとずるいと思う(笑)。

NVIDIAがAmpere世代のTensor TFLOPS公称値として示している値は,実のところ同条件で比較してはいない
画像集#024のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ
画像集#025のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 今後,4GamerでAmpereのTensor TFLOPSを示す場合,NVIDIA公称値を扱うかもしれないが,さすがにTuring世代と性能を比較すべきタイミングでは,同条件での比較が妥当であろう。そのため,今回は筆者による同条件の計算値を示しているわけだ。


GA102のメモリ周りと消費電力


 GPGPU専用GPUのGA100は,グラフィックスメモリとして「HBM2」を採用していたが,グラフィックスレンダリング用のGA102やGA104では,HBM2の採用は見送った。その代わりに,上位のGA102では,HBM2のメモリバス帯域幅に迫る新メモリ技術「GDDR6X」を採用している。
 GeForce RTX 3090と3080のメモリ帯域は,以下のように計算できる。

GeForce RTX 3090
  • 384bit×19.5GHz÷8bit=936GB/s

GeForce RTX 3080
  • 320bit×19GHz÷8bit=760GB/s

 一方,GA104はGDDR6(関連記事)のままだ。

GeForce RTX 3070
  • 256bit×14GHz÷8bit=448GB/s

 それにしても,HBM系のメモリバス帯域幅である1TB/sに迫る帯域幅を,GDDR系の技術で実現したことは,実に感慨深い。

 ところでGDDR6Xは,シンプルに同クロック駆動でGDDR6の2倍というメモリバス帯域幅を実現している。これがHBM2に迫る帯域を実現したポイントだ。
 GDDR6Xのメモリバス帯域幅を実現する技術が,下のスライドにある「PAM4」(4Level Pulse Amplitude Modulation),「Max Transition Avoidance Coding」(以下,MTA),「NEW ALGORITHMS」(新しいアルゴリズム)だ。

GDDR6Xの信号伝送アーキテクチャ
画像集#026のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 GDDR6XがGDDR6の2倍の帯域を実現する最も重要な技術が,PAM4の採用である。
 GDDR6では,データを表現する0と1の電気信号を,電圧の高い低いの2値で表現する信号形式を使っていた。といっても,高速データ伝送で電圧の乱高下は望ましくないので,「非ゼロ復帰」(NRZ,Non Return to Zero)方式を採用していた。
 GDDR6Xでは,データ表現を4段階の電圧で表現する「4段階パルス振幅変調」(=PAM4)を採用したのだ。同じ時間内に,2倍のビット情報が送れるので,同クロック駆動時にGDDR6の2倍という帯域幅を実現できるわけである。

 PAM4におけるエラーを抑制するために実装したのがMTAだ。MTAを意訳するなら,「最大振幅回避符号化技術」といったところだろうか。
 PAM4において,最も誤送信(エラー)が起きやすいのは,電圧の高低差が大きい表現のときだ。たとえば電圧レベル0,1,2,3の4段階で,それぞれ00,01,10,11の4状態を表現する場合,電圧が0から3に上がるときと,電圧3から0に下がるときは高低差が大きくなる。電圧の高低制御は瞬間的には行えず,高低差が大きいときほど時間がかかってしまう。そこで,その時点の電圧状態を新たな基準電圧として,電圧の高低差が最大になってしまう状態変化を避けるような符号割り当てを実現するのがMTAだ。
 NEW ALGORITHMSは,とくに名前が付いていないのだが,これも要はPAM4のエラーを抑制する技術である。具体的には,伝送されてきた電気信号の読み出しタイミングを,GPUの温度条件や,そのタイミングでの電気信号における電圧基準状態を考慮して動的に調整する技術,という理解でいい。

 最後に,消費電力周りの話題で締めくくろう。
 GA102およびGA104のGPUコアは,動作クロックだけでなく,供給電力を回路種別で分ける設計を導入した。具体的には,演算ユニットなどのグラフィックスコアと,キャッシュやメモリインタフェースなどのメモリ周りで分けているという。これにより,消費電力と,発熱量をこれまで以上に最適化することができたそうだ。
 その甲斐あって,Ampere世代のGA102とGA104は,Turing世代と比べて消費電力あたりの性能が1.9倍も向上したとNVIDIAはアピールしている。

GeForce RTX 3080における性能と消費電力のバランスを示したグラフ(左)と,供給電力クラスタの色分け図(右)。面白いのはグラフで,GA102は320W駆動状態でもチップ温度は78℃,冷却ファンのノイズは30dbAなので,Turing世代を240Wで駆動した状態(81℃,32dBA)よりも,低温で静かであるという
画像集#027のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 ここで興味深いのは,NVIDIAが決して「消費電力を抑えつつ高性能」ということだけをアピールしているのではなく,「たとえ高い消費電力状態になっても,冷却ファンのノイズが静かである」という点をアピールしていることだ。最高性能を追求するNVIDIAのハイエンドGPUらしいメッセージと言えようか(笑)。
 ちなみに,こうした特性はオーバークロックの余裕があることを,間接的に訴えていることになる。

GeForce RTX 3080 Founders Editionでは,2つの空冷ファンでヒートシンクとヒートパイプを挟む構造にした新デザインを採用した。ちなみに,PCI Express補助電源コネクタは,専用の12ピンとなり,製品ボックスには一般的な8ピン×2から12ピンに変換するコネクタが付属する
画像集#028のサムネイル/西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ

 GeForce RTX 30シリーズではほかにも,NVLINKや遅延低減技術「NVIDIA Reflex」,HDMI 2.1,その他のソフトウェア関連機能も盛り込まれている。それらについては,回を改めてフォローすることにしたい。

NVIDIAのGeForce RTX 30シリーズ情報ページ


  • 関連タイトル:

    GeForce RTX 30

  • この記事のURL:
4Gamer.net最新情報
プラットフォーム別新着記事
総合新着記事
企画記事
スペシャルコンテンツ
注目記事ランキング
集計:12月25日〜12月26日