オススメ機能
Twitter
お気に入り
記事履歴
ランキング
TOP
PC
Xbox
PS4
PSV
Switch
3DS
スマホ
女性向け
VR
ハードウェア
ハードウェア
レビュー
テストレポート
インタビュー
ムービー
ドライバ
ベンチマークレギュレーション
AC
アナログ
お気に入りタイトル/ワード

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

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

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

LINEで4Gamerアカウントを登録
QRコードでLINEの4Gamer
アカウントを友達登録すると
月〜金の週5回,21時に厳選
ニュースをお届けします!
※購読にはLINEアプリが必要です
NVIDIAのGPU開発部門責任者に聞く「GeForce GTX 970のVRAM 3.5GB問題」
特集記事一覧
注目のレビュー
注目のムービー
印刷2015/01/31 00:00

インタビュー

NVIDIAのGPU開発部門責任者に聞く「GeForce GTX 970のVRAM 3.5GB問題」

GTX 970カードのリファレンスイメージ
GeForce GTX 900
 2015年1月26日の記事,そして27日の記事でお伝えしている,「GeForce GTX 970」(以下,GTX 970)において,グラフィックスメモリの消費量が3.5GBを超えるとメモリバス帯域幅が大幅に低下する問題。4Gamerでは30日,NVIDIA本社でGPU開発部門の上級副社長を務めるJonah M.Alben(ジョナ・アルベン)氏に,電話会議で直接,この問題について話を聞く機会が得られた。
 海外メディアの間でも情報がぽつぽつと出てきているため,早耳のマニアなら概要を把握しつつあるかもしれないが,本稿では,氏に直接聞いた話を踏まえ,「GTX 970に何が起きているのか」をあらためてまとめてみたいと思う。


GTX 970の「正しい」スペックが明らかに


 本稿では以下,GTX 970においてグラフィックスメモリの消費量が3.5GBを超えると性能が低下する問題のことを「3.5GB問題」と書くことにするが,27日掲載のテストレポートで明らかになっているとおり,グラフィックスメモリの帯域幅を直接計測するテストでは,容量3.5GBを境にしてGTX 970の性能(スループット)が大きく低下する。

 こういう現象がなぜ生じるのか。
 そもそもを振り返っておくと,2014年9月に「GeForce GTX 980」(以下,GTX 980)とセットでGTX 970が発表されたとき,NVIDIAは,両製品とも第2世代Maxwellアーキテクチャに基づく「GM204」コアを採用するGPUで,シェーダプロセッサである「CUDA Core」の数は,GM204のフルスペックとなるGTX 980で2048基,下位モデルとなるGTX 970で1664基になるとしていた。逆にいえば,それ以外のスペックは,動作クロックを除いて変わらないとしていたわけだ。

Jonah M.Alben氏(SVP, GPU HW Engineering, NVIDIA)。名前は以前から「ヨナ」だと紹介されていたが,今回「ジョナ」と読むと説明があった
※写真は2014年9月におけるGTX 980&970説明会のときのもの
 しかし,実際のところ,GTX 980とGTX 970ではCUDA Coreの数が異なるだけではなかった。これが,3.5GB問題について,まず押さえておくべきポイントとなる。
 下に示したは,Alben氏による説明を踏まえ,GTX 980と,GTX 970について当初明らかにされていたスペックと,今回アップデートされたスペックをまとめたものだが,GTX 970では,L2キャッシュの容量が,GTX 980よりも256KB少ない。また,L2キャッシュに対するピクセルデータの出口となるROPユニットも,L2キャッシュに合わせて削減されている。Maxwellアーキテクチャでは,16基のROPユニットを1つのROPパーティションとして管理する仕様になっており,GM204の場合はこのパーティションを4基搭載するのだが,GTX 970では,このうち1パーティションでROPユニットが8基無効化されているため,総ROPユニット数は56基となるのだ。

今回明らかになった「本当のスペック」は赤字で示した

 この「L2キャッシュ周りの違い」こそが3.5GB問題の原因なのだが,では,実際には何が起きているのだろうか。Alben氏が,その説明に用いたのが下の図である。
 これはクロスバー(図中「CROSSBAR」)インタフェースを中心とした図で,クロスバーの上側がグラフィックスの処理を担う演算ユニット(同「SM」),下側がL2キャッシュ(同「L2」)およびメモリコントローラ(同「MC」),グラフィックスメモリチップ(同「DRAM」)からなるメモリ周りとなる。

Alben氏が示した図。クロスバーを挟んで上が演算ユニット部,下がメモリ周りという配置になっている
GeForce GTX 900

 ちなみにクロスバーというのは,(NVIDIA製GPUにおいては)演算ユニットとL2キャッシュとを結ぶ仕組みのこと。「接続されている出入口と出入口をつなぐ大量のスイッチ群のようなもの」だとイメージするといいだろう。
 出入口のことを「ポート」(port)と呼ぶが,ある演算ユニットのポートと,あるL2キャッシュのポートとをつなぎつつ,別の演算ユニットはまた異なるL2キャッシュのポートと接続,といった具合に,複数のポートとポートを同時に接続できるのがクロスバーのポイントである。

クロスバーの模式図。Alben氏が示したとおり,実際にはSM側が16ポートあり,L2側が8ポートなので,実際にはもっと複雑だが,ここでは簡略化している。図中の橙点はスイッチがオンになっていることを示しており,こんな感じでスイッチのオン/オフを行うことにより,SM側とL2側を接続するのが,NVIDIA製GPUにおけるクロスバーの役割だ

 Maxwellアーキテクチャにおいては,32基のCUDA Coreが,スケジューラやロード/ストアユニット,超越関数ユニットとひとかたまりのブロックを形成。そのブロックが4つまとまって,L1キャッシュやテクスチャユニット,ジオメトリエンジン「PolyMorph Engine 3.0」とセットの演算ユニットたる「Maxwell Streaming Multiprocessor」(以下,SMM)を構成する。さらに,SMMは4基で“ミニGPU”的な「Graphics Processing Cluster」(以下,GPC)となり,GM204の場合は,このGPCを4基束ねたものとなっている。

 GTX 980比でCUDA Core数が384基少ないGTX 970の場合は,SMMが3基少ない,ということになるのだが,Alben氏によれば,この「フルスペック比でマイナス3基」という仕様は,4基中3基のGPCで,SMMが1基ずつ無効化されるという仕様により実現されているという。「こうすることによって,すべてのGPCがGPCとして機能するようバランスをとっている」と,Alben氏は説明していた。
 実のところ,そう断言されたのは今回が初めてなのだが,3.5GB問題と直接の関係はない。関係があるのは,上の図における下半分のほうである。

図でグレーアウトしているのが無効化されたSMMだ。このように,4基あるGPCの3基で,SMMは1基ずつ無効化されている

 Maxwellアーキテクチャにおいては,容量256KB単位のL2キャッシュが,メモリコントローラにそれぞれ接続され,さらにメモリコントローラが容量512MB(=4Gbit)のGDDR5 SDRAMメモリチップと接続される格好になっている。
 先ほど示した図を見ると,2基のL2キャッシュと2基のメモリコントローラ単位でグループになっているのが分かるが,これはメモリインタフェース64bit分と考えてほしい。

 さて,フルスペックのGTX 980では,L2キャッシュがクロスバーに対して8つのポートで接続されている。先に説明したとおり,各ポートはそれぞれ同時にSMMと接続できるため,最良のケースでは8つのポートが同時にSMMと接続され,8枚のGDDR SDRAMによる合計4GBのグラフィックスメモリに対して,同時にアクセスできるようになっている。Alben氏は,「GTX 980の場合,8ポートを同時に使って,1KB幅でグラフィックスメモリ4GBの全域にアクセスしたとき,グラフィックスメモリに対して最大の帯域幅を得ることができる」と述べていた。

GM204では,「L2キャッシュが1ブロック無効でも,256bitメモリインタフェースを実現し,GTX 970としては販売できるダイが取れる」よう,Buddy Interfaceが導入されている。要するにこの仕様は,製造上の理由によるものというわけである
 それに対して,L2キャッシュ容量がフルスペック比で256KB少ないGTX 970の場合,8ブロックあるL2キャッシュのうち,1ブロックが無効化されることになる。
 ここは重要なポイントで,Maxwellアーキテクチャでは,製造上の問題でL2キャッシュの1ブロックが無効になってしまった半導体でもGPUとして問題なく機能するよう,L2キャッシュとメモリコントローラのグループで両者を横方向につなぐインタフェースを「Buddy Interface」(バディインタフェース)として実装している。

 これは,KeplerアーキテクチャのGPUにはなかった仕組みで,Kepler世代においては,製造上の都合によりL2キャッシュが1ブロック動作しないダイが取れた場合,当該の64bitメモリコントローラそのものを無効化しなければGPUとして動作させることができなかった。
 それに対してGTX 970では,このBuddy Interfaceを使って,L2キャッシュが1ブロック無効化された場合には,残る1ブロックで2基のメモリコントローラを担当させることができるようになっている。図を見ると,L2キャッシュが2ブロックとも有効なところではBuddy Interfaceが無効化され,L2キャッシュが1ブロック無効になっているところではBuddy Interfaceが有効になっているのが分かると思うが,図にあるとおり,どのL2キャッシュが無効になっても半導体として問題なく動作するような設計になっているわけだ。

クロスバーの下側を再掲。黒い線が有効,灰色の線が無効を示す

 ちなみに,クロスバーのポートやL2キャッシュとメモリコントローラを接続するバスの帯域幅は,GDDR5 SDRAMのそれと比べて2倍のスペックを持つとAlben氏は述べている。「そのため,(L2キャッシュが1ブロック無効化されていても)L2キャッシュとクロスバー間の帯域幅がボトルネックになることはない」(Alben氏)そうだ。

 では,どういうときに問題が起こるのかというと,4GBあるグラフィックスメモリ全域に対して並列アクセスを行う場合である。
 GTX 970の場合,クロスバーとL2キャッシュをつなぐポートは7つしかないので,7つのポートを並列で使って総容量4GBのグラフィックスメモリ全体へアクセスしようとすると,Buddy Interfaceを介して接続されるDRAMが全体の足を引っ張る格好になってしまう。

 そこでGTX 970では,7個のポート直下にある,合計3.5GB分のグラフィックスメモリと,Buddy Interfaceの先にある0.5GB分のグラフィックスメモリといった具合に,2つのセグメントに分けて管理している(※このあたりは先の記事で紹介しているとおりだ)。
 3.5GB分のグラフィックスメモリに対しては7つのポートを“普通に”駆動できるため,最大の帯域幅が得られるものの,残る0.5GB分に対しては,L2キャッシュを1ブロックしか使えないため,3.5GB分比で7分の1の帯域幅しか持たなくなる。しかし分けてあるから,3.5GB分の足を引っ張ることはない。この点がセグメント分けのメリットということになる。

 ちなみに,Alben氏は3.5GB分を「Lower segment」(下位セグメント),0.5GB分を「Upper segment」(上位セグメント)と表現していたが,これは文字どおり,0.5GB分が上位メモリアドレスに割り当てられているということだそうだ。
 グラフィックスメモリは下位のアドレスが優先的に使われるので,7分の1の帯域幅しか持たないUpper segmentが使われるケースは,比較的少ないということにもなる。

というわけで,これが正しいGTX 970のブロック図ということになる。半透明の黒は,発表時点で無効化が明らかになっていたブロック,半透明の赤は,今回無効化が明らかになったブロックだ
GeForce GTX 900


なぜ実ゲームでは3.5GB問題が顕在化しにくいのか


 以上が3.5GB問題の原因だが,当然,これだけでは納得できないという人も多いだろう。たとえば,なぜ,上位の0.5GB分で大幅にメモリバス帯域幅が低下するにもかかわらず,実ゲームにおける性能低下が対GTX 980比で数%に留まる――NVIDIAは1〜3%程度としており,4Gamerのテストでは3〜4%程度だった――のか,といったあたりは,残る疑問の筆頭ではないだろうか。

 ただこれは,先ほど説明したメモリ管理法で説明できる。実際問題,Upper segmentとなる0.5GB分が使われるケースはまれなのだが,それに加えてNVIDIAでは,「できるだけ3.5GB分を使うよう,ドライバ側で設定してある」(Alben氏)そうだ。ネット上の一部では,この対策を行ったのは最新の「GeForce 347.25 Driver」以降なのではと疑問を呈する声も上がっているが,Alben氏はそれを明快に否定しており,GTX 970がリリースされたときから,一貫してこの対策は取ってあると述べていた。
 「(MODを大量に導入した結果のような)メモリヘビーなゲームタイトルであっても,3.5GB問題はできる限り顕在化しないような設計になっている。もし(NVIDIAの主張する1〜3%程度という対GTX 980のスコア低下率を大きく超えて)大幅にスコアが低下するようであれば,ぜひ教えてほしい。それに対しては,ドライバレベルで対応が可能だと考えている」(Alben氏)。

 ところで,NVIDIAは30日になって,レビュワーズガイド内に記載されたスペック情報のアップデートを発表したわけだが(関連記事),なぜ今になって情報が明らかになったのだろうか。4Gamerではズバリ「12月の商戦期を切り抜けるため,黙っていたのではないか?」と聞いてみたのだが,Alben氏の口からは,それを否定する回答が返ってきた。

 「そもそも,私がこの問題を知ったのが,いまから3週間前のことで,NVIDIAのプロダクトマーケティングチームが対策に乗り出したのも,1週間半くらい前のことだ。
 GTX 970のスペック情報が間違っていたのは,完全に私達のミスだと言える。KeplerからMaxwellで,(Buddy Interfaceの採用など)メモリ周りの仕様が変わっていたにもかかわらず,それがエンジニアリングチームからマーケティングチームにうまく伝わらず,マーケティングチームが『メモリ周りの仕様はKeplerから変わっていない』と判断したため,誤った情報が出てしまった。情報のやりとりが十分ではなかった」(同氏)。


「NVIDIAは,可能な限り今回の問題に対応する」


 理由はどうあれ,GTX 970は,2014年9月に発表されたときとは異なるスペックのGPUであることが明らかになった。L2キャッシュの容量は2048KBではなく1792KBで,ROPユニットの総数は64基ではなく56基である。ざっくり4か月強もの間,NVIDIAは誤ったスペックに基づいてGTX 970の販促活動を行い,実際にGPUを出荷していたという話になるわけだ。

 ただ,ここもやや複雑ではある。NVIDIA公式Webサイトの製品情報ページでは,L2キャッシュの容量も,ROPユニットの数も公表されていない。あくまでも,レビュワー向けの参考情報という扱いである。また,先に説明したとおり,メモリコントローラは削減されていないので,公表されている「グラフィックスメモリ容量4GB,256bitメモリインタフェース」に,スペック上の誤りはないということにもなる。
 実際,「日本では,景品表示法第4条第1項第1号に違反する『優良誤認』に当たるのではないか」と尋ねたときも,Alben氏は,法律関連の事項について回答する権限はないと断ったうえで,以上の見解をほのめかす回答をしていた。
 もちろん,GTX 970ユーザーがそれで納得するかというのは別の話だが……。

 ちなみに,この問題はもっと早い時期に誰かが気付ける可能性があった。というのは,CUDAの開発キット(SDK)に付属する,CUDAデバイスの能力を調べるコマンド「devicequerydrv」が,GTX 970が登場したときから正しいL2キャッシュ容量を報告していたからである。
 NVIDIAマーケティングチームの誰か,あるいはメディアやユーザーがこれに気づいていれば,3.5GB問題は,もっと早く明らかになっていたかもしれない。

これがGTX 970を装着した状態で実行したdevicequerydrvの結果。L2キャッシュ容量は1835008bytes(=1792KB)と報告されていている。「これは,GTX 970が登場したときから正しくレポートされていた」とAlben氏
GeForce GTX 900


 電話会議の最後に,Alben氏は,「GTX 970は価格対性能比に優れた製品で,私達がアピールしてきた性能を間違いなく持つと確信している。今回は3.5GB問題でユーザーに心配をかけてしまったが,この問題に可能な限り真摯に対応していくことが我々の責務だと思っている」と語っていた。ユーザーに対するサポートをどうするかといった点については,エンジニアリングを統括するという氏の立場上,語ることはできないと述べていたが,技術上の疑問に対しては,可能な限りユーザーに情報を開示するとのことだ。
 今後,何かしら追加の情報などが得られたら,あらためてお伝えしたいと思う。

「グラフィックスメモリを3.5GB以上使う局面で,GTX 970の性能が低下する」現象を,実際に確認してみた

NVIDIAのGTX 970製品情報ページ

  • 関連タイトル:

    GeForce GTX 900

  • この記事のURL:
line
4Gamer.net最新情報
最新記事一覧へ新着記事10件
トピックス
スペシャルコンテンツ
注目記事ランキング
集計:11月19日〜11月20日
タイトル評価ランキング
82
ARMS (Nintendo Switch)
76
スプラトゥーン2 (Nintendo Switch)
74
鉄拳7 (PS4)
70
2017年05月〜2017年11月