Skyrimからちょっと脱線気味ですが、グラボ検討した記事の流れでもう1個。
GTX970のVRAM3.5GBが騒がれたのは1月頃だったと思うので、もう半年も前のネタを今更、という感がある上、どれだけニーズあるやらといった所ですが。
メモリアクセスの「帯域」に関しては色々数字のマジックがあるのですが、970は特にマジックが強い気がしたのでまとめてみます。
グラボの設計は経験が無く、マザーボードしかやったこと無いので、ちょっとエアですけども。
メモリアクセスの概要
GTX980/70で使われているのと同じ、4GbのGDDR5(多分8x32bit x16bank)の使い方を考えてみます。
1個使いの場合
1個ならこんな感じでMC(Memory Controller)と32bitで繋げます。容量は4Gbなのでbyte換算すれば0.5GB。
動作クロックが7GHz相当(圧縮は考慮外)であれば、1個での帯域は28GB/sになります。
8個使いの場合
これを使って4GBのメモリ空間が欲しい場合は、8個使うしか有りません。最も効率的な使い方は、8個を並列に256bit幅で繋ぐ方法になります。
8パラ接続ができれば、容量4GB、帯域は単純に8倍した224GB/sになります。
※GM204のMCは32bit単位のユニットが並列接続されてるみたいですが、ここでは物理的な概略図として1個にしてます。
また、上記の帯域は電気的特性の話で、実際にはメモリ圧縮により298.7GB/s相当らしいです。
実質的には256bit幅で容量4GBのメモリが1個あるのと等価です。シンプルですね。
これが本来の普通なメモリの使い方です。
GTX980のVRAMアクセス
説明したのと同じメモリの使い方をしています。4GB 256bitのRAMが1個あるのと同じです。256bit幅でのDATA転送においては、理論値の帯域が出る筈です。 特に問題ありません。
GTX970のVRAMアクセス
これが1月に騒ぎになった話ですね。上位0.5GBが低速になるというやつです。 こんなブロック図が出回りました。
グラボの開発したことないので、僕の認識が間違ってたらすいません(合ってるとは思ってますが)。
L2キャッシュが1個削除されているということばかりクローズアップされてましたけど(大事には違いありませんが)、これはあくまでトリガであり、その結果どうなっているのか?というのがあまり言及されてなかった気がします。
同じような図にしてみました。問題のキャッシュを削った0.5GBを「Upper Segment」として上位アドレスにマッピングしているとのこと。
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特性アウトだと思います。
左の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倍速になりません。他のレジが遊んでるだけになります。
常に客足の途切れない大型店舗であれば、達人より安上がりです。