GPUのメモリシステム

GPUがCPUに比べて高い性能を持つ理由は、CPUと比較して多数の演算器を持ち、それらを並列に動作させているためである。しかし、そのためには、多数の演算器にデータを供給し、多数の演算結果を書き込めるメモリが必要である。

例えばXeon E5 2697 v3 CPUの場合は、4チャネルのメモリチャネルを持ち、使用できるメモリはDDR4-1600/1866/2133となっている。メモリチャネルは8バイト幅であるので、最大では8バイト×4チャネル×2133MHz=68.265GB/sのメモリバンド幅となる。

一方、NVIDIAのTesla K40 GPUでは、288GB/sと4.2倍のメモリバンド幅を持っている。このように、多数の演算器を動作させるために必要なメモリバンド幅を確保しているわけである。

GDDR5 DRAM

高性能のGPUでは、この高いメモリバンド幅を実現するために、DDR3/4のようなCPU用のDRAMではなく、GDDR5というDRAMを使っている。

DDR3/4 DRAM GDDR5 DRAM
データ転送速度 0.8~3.2Gbit/s 4~7Gbit/s
1チップのbit幅 4/8bit 32bit
表3.1 DDR3やDDR4系DRAMとGDDR5 DRAMの比較

DDR3/4系のDRAMのデータピンのデータ転送速度は、典型的には1.333Gbit/s~2.4Gbit/s程度である。一方、GDDR5 DRAMではデータピンあたり7Gbit/sの速度でデータ転送するものが使われている。

このように、GDDR5 DRAMはデータピンあたりのデータ伝送速度がDDR3/4 DRAMの3~4倍であるので、それだけ高いメモリバンド幅が得られる。また、GDDR5 DRAMは1チップで32bit幅のデータを読み書きできるので、4bit、または8bitのデータ幅のDDR3/4 DRAMより少ないメモリチップ数で必要なビット幅を実現することができる。

CPUのメモリチャネルは4チャネル合計で256bit幅であるが、ハイエンドのGPUは12~16個のGDDR5 DRAMを使って384~512bitと、CPUに比べて1.5~2倍のデータ幅を持っている。

この3~4倍の転送速度の違いと、1.5~2倍のデータ幅の積で、GPUの高いメモリバンド幅が実現されている。

なお、DDR3 DRAMでは、データのタイミングを揃えるため、CPUとDRAMの間の配線長を全データビットで同じにする必要があるが、GDDR5 DRAMではデータレートが速い分、等長配線の誤差の許容度が小さくなってしまう。このためGDDR5 DRAMでは、配線長の違いを補正するトレーニング機構が組み込まれている。また、ビット幅が広いので、出力のドライバの消費電力が問題となる。このため、Pseudo Open Darinという出力がHighの時には電力消費が小さくなる回路形式を使い、出力にDBI(Data Bus Inversion)という信号を追加している。出力にLowが多い時には、DBI信号を立てて、データをすべて反転して伝送する。こうすると、Low状態の出力の数が減り、消費電力を減らすことができるように工夫されている。これらのトレーニングやバス状態の反転機能は、DDR4 DRAMにも採用されている。

GDDR5 DRAMの方が性能が高いなら、CPUもDDR3/4ではなく、GDDR5 DRAMを使えば良いと思うかも知れないが、そう上手くはいかない。

GDDR5 DRAMは最高7Gbit/sという高速でデータを伝送するので、GPUとの間の配線を短くし、GPUとGDDR5メモリの接続は1対1に限定され、コネクタを使うことも難しい。つまり、GDDR5 DRAMはGPUを取り囲むように近傍に配置し、GPUのメモリチャネルのピンとDGGR5 DRAMのピンを1対1で短い配線で繋ぐという実装に限定される。

図3.5 GDDR5 DRAMとDDR3/4 DRAMの接続方法の違い

ハイエンドのGPUで、12個のGDDR5 DRAMを使うと、4バイト(32bit)×12チップ×7Gbit/s=336GB/sのバンド幅が得られるが、各チップの容量が4Gbitの場合は4Gbit×12/8=6GBのメモリ容量に限定されてしまい、それ以上のメモリをGPUに接続することはできない。

一方、CPUの場合は、各メモリチャネルに3枚程度のDIMMを接続することができる。そしてDIMMには8個の4Gbit DRAMが搭載されているとすると、DIMMの容量は4GBである。これが4チャネルあるので、4GB×3DIMM×4チャネル=48GBのメモリを接続できる。もっとメモリが必要な場合は、DIMMの裏面も使って16個のメモリチップを搭載した製品や8Gbit、16Gbitというチップを使って32GBの容量を持つDIMMもあり、このようなDIMMを使えば、32GB×3DIMM×4チャネル=384GBという大きなメモリのシステムを作ることもできる。

データベースの処理やビッグデータの処理では、大量のデータをメモリ上に展開して、速度の遅いハードディスクへのアクセスを減らして処理性能を上げるのが一般的となっている。また、科学技術計算でも大きなメモリ領域を必要とするものがある。このような用途では、GDDR5ではダメで、DDR3/4系のDRAMが必要になる。