NVIDIAはGeforce RTX 50でメモリーバスビット幅と容量を変更しない?…… GDDR7は使うだろうけど。

VideoCardz.comとTechPowerUpの記事である。


TechPowerUpのコメント欄は8Kゲーマーが湧いて失望に騒いでいるが、発熱やコストの問題があって増やさないというより増やせないのもあるのだろう。

確かにVRAMの容量を増やせば高解像度での処理は優位になるが……。
VRAMの容量を増やさないのは、商業的な問題と価格の問題だろう。GDDR7にするなら容量の多いメモリーは価格が高いし製造が少ないことが予想される。だから、使えないし使わないというだけだと思われる。GDDR6Xなら価格が多少下がってくるかもしれないので、出来るかもしれないが、これはJEDECの標準仕様とは異なるし、玄人でなければGDDR6XよりもGDDR7の方が良さげに見えるので、販売優位性(ブランド力)があると見ることが出来る。だから、少なくとも初期では据え置くのだろう。SuperとかTiでは容量が増えるかも知れない。


それから、バスビット幅は多分簡単には増やせないと考えられる。
VRAMのバスビット幅を広げれば、同じコア数でもGPUは性能が爆発的に上がる。特に高解像度のゲームや生成・推論AI処理ではより沢山の処理を短時間で終わらせることが出来るようになる。それは、CPUとは違ってGPUの演算構造が単純だからだ。GPUはあくまでシェーダースケールの範囲でポインターをずらしながらループ演算するものが多いため、演算に失敗してリセットされる心配も殆どない。クロック周波数+シェーダー数がそのまま結果数に反映される。

だから、メモリーインターフェースの幅が広くなり、メモリーの容量も合わせて増やせるなら高解像度や高密度な処理をする時の性能が上がる。もちろん、シェーダー数上限とクロック数の上限による物理的頭打ち(後述する)はあるが、シェーダー数を大きく増やしクロックも多少でも上げられるなら、帯域幅を広げることは特にゲームなら高解像度で大きな性能アップをもたらすわけだ。


ちなみに、CPUだとメモリー帯域が広がってもそこまで性能は上がらない。理由は、演算するユニットが大きい一方で、演算出来るコアの数が少ないからだ。演算ユニットが大きくなると、コア辺りで処理出来る命令の複雑度が上がる。

「AをBしてCに代入してDと掛ける」みたいな演算が1回の演算で出来るみたいなものだ。本来なら別々にあってもおかしくないこれらの回路が1つのコアの中に含まれているからだ。その演算専用の回路に振り分ける作業をデコーダー分岐という前処理で行っている。
その代わり、もしもこれをセットで1度にCPUコアに流し込み、1つでも演算する回路を間違ってしまうと、場合によってはその間違った部分を含めたA、B、C、Dの全てをリセットして演算前まで差し戻される。また、コアの回路が複雑になったことで、コアの中にある命令実行ポートの数も増えており、4~7個またはCPUの種類によっては1つのコアにそれ以上の実行ポートがある。上記の場合はAをBして、Cに代入し、Dと掛けるだから、最大3~4つの実行ポートを使う可能性がある訳だ。

これを1回の演算で行うなら4つの実行ポートがある場合、1つは眠った状態になる。即ち演算に使われないわけだ。この2つの要件がCPUは大きく汎用性が高いが、ダイの大きさの割に専用のハードウェアに比べて性能効率は低いと言われる所以でもある。しかし、一方でこの2つの要件があるから、結果的に最大クロック周波数が高くてもコア全体の何割かは演算に使われていないため、発熱量が大きく下がるという特性もある。逆に言えば、メモリーなどの帯域を大きく広げても、この問題があるから専用のハードウェアに比べて性能が上がりにくいというのも特徴だ。

頭でっかちで1回の処理で使わない回路も多くミスヒットが割とある。さらにパイプライン処理故に結果が出るまでの時差も専用回路に比べると掛かるだから、物理メモリーの帯域よりもこのミスや処理の都度変化による差が大きくなる分、速度の異なる階層キャッシュで次に必要となるものを順番待ちさせて待機させた方が効果的なのである。



話をGPUに戻そう、ではメモリーバスを広げるとGPUの発熱が増えると言うのは何故なのか?
それは、元々処理に必要なメモリーデータ幅が足りていないなら、メモリーバスを広げるだけで大幅に性能が上がるからだ。そして、性能が上がればコアの発熱が膨大に増えることと、さらに上記したCPUだと熱は命令ポートの占有率が低いことで、ある程度分散するのだが、GPUだとチップがCPUより今では大きな状況にあり全体がフル稼働してしまうことで、熱密度が激烈に上がるのだ。

これは、単純計算だが、例えば100個のFP32演算器(32bit)が2000MHzで動くとしよう。2000MHzなら理論上演算を1秒間に20億回できる訳だが、100個で20億×32bit(4byte)の処理ができる訳だ。2000MHzは2GHzなので4byteで2GHzなら一つの回路で最大8GB/sのデータを処理することが出来る。これが100個あれば800GB/sの帯域を求める事になる。

GPUの場合はシェーダーユニット単位でそれを要求するわけではなく、GeforceならSM(Streaming Multiprocessor)とTensor Coreのグループ単位で帯域を確保しているはずだ。だから、例えばRTX 3060 12GBならSMまたはROPの数で28~48×最大1800MHz×32bit(4byte)で201.6~403.2GB/sぐらいになるだろう。これにTensorが別枠で機能するならプラスいくつかの帯域幅が必要になる。実際のメモリーバスは360GB/sなので、ゲーミングとしては決して悪くない数字だ。

じゃあ、RTX 3070はどうなのか?
SMは46、ROPは96になる。即ち46~96×1700MHz×4byte(32bit)なのだ。これを計算すると652.8GB/sである。メモリー帯域は448GB/sで256bitである。

即ち、上の製品群になるとSMなどの数は大幅に増えるのに、メモリーバスの幅とクロック上昇は減ってくるので、相対的にコア辺りのバス幅が適正値より減っていく。だから、幅を広げると性能も大きく上がるわけだが、そうすると動作に伴う熱量が増えるので、その対策が必要になるとコストが増す問題もあるわけだ。それに加えてGPUは熱密度が高いので下手に上げることも出来ない。


ちなみに、GDDR6Xに比べてGDDR7になれば発熱は減ってくるし、クロックが上がれば帯域幅も若干は増えるかもしれない。だから、ビット幅を広げずにGDDR7にするというのは選択として間違っていない。


この問題は今ではAMDでもNVIDIAでもIntelでも存在する問題だ。当初は半導体の製造刷新でこれらの熱密度の上昇を抑え、性能を上げることも出来ていたが、今では刷新して新しい世代になっても、CPUもGPUもどちらも性能をより一気に上げようとすれば、熱問題が避けられなくなった。そこで、エアフローに力を入れて、下手すればGPUなら2~3スロット分ぐらいを冷却に使って4スロットのポートを埋めるみたいな荒技まで使うようになった。

コンシューマGPUの場合はもっとやろうと思えば帯域幅を増やして発熱も増やして性能を上げることも出来るだろうが、それをやらないのは、少なくともNVIDIAの製品は既にそれをやっても、コンシューマのブランドとして成り立たないほどの発熱になるか、夏場などに正常に動かせる保証が無くなるからだろう。下手すれば家庭用の100V(日本の場合)~125V電源(欧米の場合)で動かない製品が出てしまう恐れもある。だから、帯域に関してはもう少し半導体技術などが熟れるのを待っていると思われる。

容量については、GDDR7にするなら増やすには価格と製造の準備が必要である。まあそれが予想より早く出来るなら、増やす可能性もあるが、そもそも8Kとかでゲームする人は少ないだろうし、GPGPUでAIとかも本気なら、NVIDIA RTX(Quadro)でも使えというところだろうから、現状では据え置く方向なのだろう。まあ、これも噂であり1年先には変わっているかも知れないが……。

コンシューマの殆どはiGPUだけでも既に満足出来る性能に達しつつあるし、AMDもRDNA4は最上位を出さない方向で進んでいるので、NVIDIAが次の帯域で無理をしないのは当たり前と言えるだろう。