Skyrim箱庭DIY

MODによる固有の環境不具合は自分で直して快適ゲーム。CTDにさようなら。Do It Yourself!!

Geforce GTX970におけるVRAM周りの「数字のマジック」



スポンサーリンク

Skyrimからちょっと脱線気味ですが、グラボ検討した記事の流れでもう1個。

GTX970のVRAM3.5GBが騒がれたのは1月頃だったと思うので、もう半年も前のネタを今更、という感がある上、どれだけニーズあるやらといった所ですが。

メモリアクセスの「帯域」に関しては色々数字のマジックがあるのですが、970は特にマジックが強い気がしたのでまとめてみます。

グラボの設計は経験が無く、マザーボードしかやったこと無いので、ちょっとエアですけども。

 メモリアクセスの概要

 GTX980/70で使われているのと同じ、4GbのGDDR5(多分8x32bit x16bank)の使い方を考えてみます。

 

1個使いの場合

1個ならこんな感じでMC(Memory Controller)と32bitで繋げます。容量は4Gbなのでbyte換算すれば0.5GB。

 

1個使いでのメモリ接続

 

動作クロックが7GHz相当(圧縮は考慮外)であれば、1個での帯域は28GB/sになります。

 

8個使いの場合

これを使って4GBのメモリ空間が欲しい場合は、8個使うしか有りません。最も効率的な使い方は、8個を並列に256bit幅で繋ぐ方法になります。

 

256bit幅のメモリ接続

 

8パラ接続ができれば、容量4GB、帯域は単純に8倍した224GB/sになります。

※GM204のMCは32bit単位のユニットが並列接続されてるみたいですが、ここでは物理的な概略図として1個にしてます。

また、上記の帯域は電気的特性の話で、実際にはメモリ圧縮により298.7GB/s相当らしいです。

 

 

実質的には256bit幅で容量4GBのメモリが1個あるのと等価です。シンプルですね。

 

4GB256bitのメモリと等価

 

これが本来の普通なメモリの使い方です。

 

GTX980のVRAMアクセス

説明したのと同じメモリの使い方をしています。4GB 256bitのRAMが1個あるのと同じです。256bit幅でのDATA転送においては、理論値の帯域が出る筈です。 特に問題ありません。

 

GTX970のVRAMアクセス

これが1月に騒ぎになった話ですね。上位0.5GBが低速になるというやつです。 こんなブロック図が出回りました。

GM204-200のブロック図

グラボの開発したことないので、僕の認識が間違ってたらすいません(合ってるとは思ってますが)。

L2キャッシュが1個削除されているということばかりクローズアップされてましたけど(大事には違いありませんが)、これはあくまでトリガであり、その結果どうなっているのか?というのがあまり言及されてなかった気がします。

 

同じような図にしてみました。問題のキャッシュを削った0.5GBを「Upper Segment」として上位アドレスにマッピングしているとのこと。

GTX970のメモリバス

 

256bitアクセスは、前述の通りメモリを8個使いして「256bit幅 4GBのメモリが1個」とみなせる状態において、はじめて可能になります。

ところが GTX970は先の説明の通り、問題の1個をUpper Segmentに振り分けています。メモリ1個だけを上位0.5GBにマッピングしている訳です

これはつまり、Lower Segmentである3.5GB空間はメモリ7個使いで構成されていることを意味しているので、

 

Lower Segment 3.5GBは32bit x 7=224bit

Upper Segment0.5GBは32bit x 1=32bit 

 

のバス幅でのアクセスということになります。つまり、メインで使う3.5GB空間に対して256bitアクセスが発生することはありません

 さりげなく速度が「1/7」になると言ってたマジックですね。「1/8」ではなく・・・

それでも「256bit」と公称できるのは何故?

正直詐欺的だとは思いますけど、おそらく256bitと呼称しても、法的問題は回避可能かも知れません。

 

 物理的なバス幅は256bitあるから

224bit+32bitという変則ですけど、256本のバス線があることは事実なんですね。通常であればこういう設計することは有り得ないです。物理的に256本アートワーク引きながら、フルに使わない理由が無いので。

もし最大224bit幅のアクセスにしたければ、普通はこんな感じで作ります。

※あくまで机上の話です。DDR5程の高速系でこれやったら、実機はAC特性アウトだと思います。

通常の224bitバス幅の図

左の6個で192bit、右の2個のうちどちらか1つを足して224bitアクセスにします。アドレスデコーダを工夫すればいいだけなので、右の2つのメモリは単純にバス線を束ねるだけ。わざわざ256本引く意味が全くありません。基板面積的にアートワーク苦しくなるだけです。ただし、これを256bitと表示したら確実にアウトです

 

何故GM204はこんな無駄に見えることをしているかといえば、ご存知の通り歩留まり向上目的です。普通から見れば極めてトリッキーな構造ですが、これのおかげでGTX980になれなかった石でも、「256bit 4GBのGTX970」に転生してます。この構造が無かった場合は、224bit 3.5GBという仕様をぶら下げて発売されることになってたでしょう。

「256bit 4GB」という表示をしたいが故の無茶仕様な気もするのですが。Upper Segment、XP時代に余剰メモリをRAMDISK化したような使い方してるんでしょうか。主記憶にスワップした分を掴みにいくよりは速いんですかね、これでも。オンメモリとして処理されたら酷いことになりそうです・・・

 

(妄想)どこかに256bitアクセスできる領域作ってない?

上記の理屈だと1つ問題なのが、「256bitアクセス」出来ないよね?という点。nvidiaが「256bitアクセス」を公称してなかったかもですが、wikiにはGTX980と同一の帯域が記載されていたので。

もし256bitアクセスを公称しているなら、例えばアドレス最上位に1ページだけ256bitアクセス可能な領域作ってるとか、そういう手法取ってないか?と思った次第です。

まあ、そんなことしてたら逆に首絞まりそうな気もしますが(汗)

 

いずれにしても、ハード屋的にはちょっと970は避けておきたい所です。

 

おまけ

メモリの帯域に関して。これも少しマジックがあって、同じ数字であればバス幅よりもクロックで稼いでる方が、計算上の速度は上がります。体感に出るかはわかりません、すいません。

理由は、アドレッシングやランダムアクセス等、バス幅を使い切らないアクセスが発生した場合は、一気に帯域の数字が下がる為。

 

例えが微妙かもですが、スーパーのレジをイメージすると分かりやすいかも。

 

高クロックのレジ

通常の3倍の速度でレジ打ちする達人1人のレジは、どんな時でも速いです。客が1人でも10人でも安定の3倍速。

レジを複数置けない小さいお店でも、3倍速で客を捌けます。

 

バス幅の広いレジ

普通の人のレジが3列あった場合、店が混んでればお客を捌く速度は3倍になります。達人1人のレジと同じ速度。達人の時給が通常の4倍だったとしたら、こっちの方が安上がりです。反面、客が3人未満の場合には3倍速になりません。他のレジが遊んでるだけになります。

常に客足の途切れない大型店舗であれば、達人より安上がりです。