ノトパソのメモリーの増設をしようと思い、とあるAmazonで4GBのメモリを購入しました。そして失敗しました・・・ その時の話です。

正直メモリをなめてました・・・(´・ω・`)

その反省を含め、メモリに関する知識を少し整理したいと思います。

DRAM

ではまず、DRAMという基本事項から。このDRAM(Dynamic Random Access Memory)とは、RAM(Random Access Memory)の仲間です。そもそも、RAMとはメモリ内の何処の情報にも一定時間でアクセスできることを保証するようなメモリのことで、文字通り、ランダムなアクセスが一定時間で可能です。今のいわゆるメインメモリーは全てRAMの仲間です。

下記の各項目について、これから説明していきます。

rect4269

 

DRAMは、RAMの頭にDynamic(動的)がついていますね。ここでのDynamicは、DRAMに必要なリフレッシュという作業を指しています。DRAMはその記憶を保持するために、一定間隔でコンデンサ内の電荷を更新します。そうでなければ、電荷が徐々になくなっていき情報が消えてしまうからです。

この常に一定間隔でリフレッシュし続けているということで、動的(Dynamic)なRAM → DRAMとなりました。

逆にリフレッシュが不要なRAMを、静的(Static)なRAM → SRAMといいます。SRAMは記憶容量あたりの単価が高いので、PCのメインメモリーとして使われることはありません。CPUキャッシュなどのより高速なアクセスが必要な部分で使われます。

SDRAM

SDRAM(Synchronous DRAM)は、PC回路のクロック信号と同期して動作するDRAMのことです。それ以前のDRAM(FPやEDOなど)は非同期的に動作しており、入力に対して可能な限り早く出力する仕組みだったのに対して、SDRAMはクロック信号とタイミングを合わせて動くので、従来のDRAMよりも高速に動作します。※SRAMとは混同しないで下さい。

ちょっとまて!?

「可能な限り早く動作する」非同期型DRAM「タイミングを計って動作する」SDRAMとで、なぜ後者の方が速いの?おかしくない?と考える方は多いでしょう。少なくとも私はそう思いました。

だって普通に考えたら、自分単独で縄跳びするのと、他者に回してもらい大縄跳びするのでは、自分単独で縄跳びする方がより早く効率的に跳べますよね。まぁ、その人が縄跳び上手いという前提での話ですが・・・

しかし、メモリの場合はそう単純な話ではないようです。というのも、SDRAMではパイプライン化という効率的な命令やデータアクセスの方法が使えます。SDRAMにおけるパイプライン化を非常に簡単にいえば、データ書込み命令後に書込みが完了する前に次の書込み命令を受けられる、またはデータ読出し命令後に読出しが完了する前(読出し命令から実際の出力までの遅延をレイテンシと呼ぶ)に次の読出し命令を受けられる、という仕組みです。これによって、効率的なデータアクセスが可能となり結果的にSDRAMは高速で動作するのです。パイプライン化の詳細は難しいので各自調べてください。

 

さて、クロックの話が出たので、クロックについても簡単に整理しておきましょう。

 

そもそもクロックとは、パソコン内部の電子回路に一定間隔で流れている電気信号です。この電気信号はパルス波という性質の信号で、滑らかな波(正弦波)ではありません。ON/OFFがハッキリした明瞭な信号です。ま、このON/OFFのハッキリ加減には正直憧れますがね・・・はい。

クロック信号は、「一定間隔(一定周期)」「ON/OFFが明瞭(パルス波)」というのが特徴であり非常に重要です。

クロック信号の波形は、実際下のようになっています。

clock01

図のとおり、山部分だけでなく谷部分も含めて1クロックです。そして、山の登り部分をクロックの立上りといい、山の降り部分をクロックの立下りといいます。

この波形を見れば先ほど行った「ON/OFFが明瞭」の意味が分かりますよね。

また「一定間隔」(正確にはクロック同士の間隔はなく、1クロックの時間に依存する)については、ある時間内で発生するクロック数が常に一定ということを示しています。ある時測った1秒あたりのクロック数が10で、別の日計ると30などでは困りますよね。クロック信号はハードウェアの動作に対する指揮者なので、こんなんでは指揮者失格です。

この一定周期でなければならないクロック数ですが、1秒あたりのクロック数を表す単位としてHz(ヘルツ)があります、といってもご存知ですよね。1秒間に1クロックならば1Hzなので、CPUのクロック周波数などにある2.4GHzなどは想像を絶する速さです。

2.4GHz = 2,400,000,000Hz = 1秒間に24億クロック・・・

電波的な数字ですね。ちなみにCPUのクロック数はマザーボード上のクロック数(ベースクロック)を逓倍回路(クロックダブラ)という増幅装置でクロック数を整数倍に増やしていますので、驚異的な数字となるのですが、今関係ない話なので気になる方はWebで → 逓倍回路

分かりますか? 2.4GHzのCPUの場合、1クロックにかかる時間は、

$frac{1}{2400000000} fallingdotseq 0.417ns(ナノ秒)$  となります。

!?っと思った方、具体的には0.417nsという時間は、光が大体12.5cm進む距離です。kmじゃなく cm ですよ? 手をフレミング状態にしたときの親指と人差し指の間くらいですよ!?

どれくらいアッという間か分かっていただけたと思います。

※ 3.3ns(ナノ秒) = 光が真空中を1メートル進むのに要する時間

 

DDR

DDR(Double Data Rate)というのは、DDR-SDRAMのことでありSDRAMを省略しているだけです。後継のDDR2やDDR3も同様です。

つまりSDRAMの進化形がDDR-SDRAMということです。

なにが進化したかというと、データ転送量です。以前のSDRAMは1クロックにつき1回だけデータ転送ができました。しかしDDRはデュアルというだけあった1クロックにつき2回データ転送ができます。具体的には、先に説明したクロックの立上がりと立下りでそれぞれ1回づつ行うので計2回ということになり、従来の2倍の速度で動作することができました。

ちなみに、DDRの登場によって対比的に、従来のSDRAMはSDR(シングル・データ・レート)と呼ばれるようになったそうです。

 

DIMM(Dual Inline Memory Module)

これは回路や論理的な規格ではなく、メモリの形状的な意味での規格です。コンセントとかと同じような感じです。

通常、DIMMといえばデスクトップ用のメモリーとなり、サイズが大きいです。ノーパソ用にはSO-DIMM(Small Outline DIMM)というスモールサイズのメモリがあります。

 

性能の話

まぁ色々と用語はありますが、結局気になるところはメモリの性能です。また、メモリは他のPCパーツや基盤との相性がデリケートな部品なので、メモリ選びは気を配る必要があります。

まずDDRn(n=数字)についてですが、単純に数字が大きいほど、一回のデータ転送速度が速くなります。具体的には、以下のような関係になります。

SDR -x2-> DDR -x2-> DDR2 -x2-> DDR3

SDRは初期のSDRAMのことです。進化するにつれて、データ転送速度が2倍2倍と速くなってます。つまり、単純計算でDDR3はSDRよりもデータ転送速度が8倍速いということになるのです。

なぜ早くなっているかというと(SDRは違うので除く)、内部クロックと外部クロックのギャップが関係しています。ここでいう内部クロックは、メモリクロック、つまりメモリを構成するDRAMセルに流れているクロック信号です。外部クロックとはバスクロック、又はFSB(フロントサイドバス)などと言われる基板上に流れているクロック信号です。

ここでいうギャップはクロックの速度差のことです。というのも、メモリクロックとバスクロックにはかなりの速度差があります。そして、いくら他方が速くても、遅い方に同調して動作します。

例えば、メモリクロックが100MHzで、バスクロックが200MHzの場合、普通に考えると、メモリクロック < バスクロック という関係でも100MHzしか出せません。

この速度差を吸収し、高速な動作を行うための仕組みがプリフェッチです。ではプリフェッチとは何なのかということですが、これはメモリがCPUに対する命令を事前に(プリ)準備しておく(フェッチ)ことです。よって、これから使うであろう命令を事前に用意しておくため、効率がよく高速化を図れます。

さて、能書きが多くなりましたが、具体的なメモリ表記(DDR数字)と速度等の関係を見ていきましょう。

DDRが2倍速動作する仕組み

まずは、最初期のDDR-SDRAMである只のDDRから見てみます。DDRはメモリクロック=バスクロックという関係であり、互いに速度差はありません。これなら何もギャップを考える必要はないので単純明快!!と言いたいとこですが、DDRの特性上、動作周波数はバスクロックの2倍となります。下図を参考下さい。

メモリチップ メモリクロック バスクロック 動作周波数
DDR200 100MHz 100MHz 200MHz
DDR500 250MHz 250MHz 500MHz

数字は例ですが、動作周波数が2倍になっていることに注目ください。この2倍の速度差を埋めるためにDDRでは2bitプリフェッチを利用します。

で、なんで速度が速まるのかというと、概要はこうです。

いくら頑張ってもメモリクロックの周波数を超えることはできない(200MHzと謳えど100MHz上限である)

なので、予め2bit分の情報を常にI/Oバッファに準備しておこう。そして、2bitが空になったら、再び2bit分を準備しよう。

これで、2倍速のアクセスにも対応できたよ!

上記の部分の2bit分の準備データがプリフェッチのことです。そしてイメージでいうと、プリフェッチを準備する周期は、200MHzの動作周波数ならば半分の100MHzとなります。よって、メモリクロック(内部クロック)が100MHzでも、見かけ上は200MHzで動作することができるのです。

これが、DDRの2倍速動作の秘密です。

※説明は大分簡略化しており、正確性に欠ける箇所もありますがご了承を

DDR2が4倍速動作する仕組み

仕組みはほぼほぼDDRと同様ですが、大きな違いはプリフェッチサイズです。DDRが2bitだったのに対して、DDR2では4bitになっています。

メモリチップ メモリクロック バスクロック 動作周波数
DDR2-400 100MHz 200MHz 400MHz
DDR2-900 225MHz 450MHz 900MHz

バスクロックがそれぞれメモリクロックの2倍になっているのは、とりあえず置いといて、メモリクロックと動作周波数の関係に着目してください。それぞれ4倍になっていますね。この速度差を4bitのプリフェッチが吸収することで、結果的にメモリクロックの4倍、つまりDDRの2倍の速度でDDR2が動作するのです。

 

DDR3が8倍速動作する仕組み

これも同様に、DDR3のプリフェッチは8bitなので、メモリクロックの8倍速で見かけ上動作します。

メモリチップ メモリクロック バスクロック 動作周波数
DDR3-800 100MHz 400MHz 800MHz
DDR3-1866 233MHz 933MHz 1866MHz

バスクロックと動作周波数の関係はどのDDR規格でも2倍の関係になっているのは同じですね。

後は、メモリクロックとバスクロックの速度差の違いであり、又はそれに対応するプリフェッチ機構があるか?という違いです。

つまるところ、各表を見ると分かる通り、メモリクロック自体の周波数はほとんど変化ありません。要は、低速動作するコア部分(DRAMセル)を持つメモリを、如何にI/O部分を工夫することで高速動作しているように見せるか?というのがDDRの進化の歴史といえるでしょう。

 

ちなみに、2015年11月現在の主流はDDR3なのですが、さらに2倍高速なDDR4というメモリが市場に出始めています。速度的にはDDR3の2倍なのでメモリクロックが100MHzならば16倍の1.6GHzで動作します。このDDR4ですが、特筆すべきは、従来の倍々規則通りプリフェッチが16bitあるわけではなく、DDR3と同じ8bitに留まっています。なのに2倍速な理由として、新たにバンクグループという仕組みがあります。16分割したメモリセルアレイを4つ1グループとして4グループ設けて、アクセス効率化を図った仕組みです。詳しくは説明できませんので省略しますが・・・

DDR4-3200ともなると、メモリクロック自体は200MHz程度ですが、動作周波数ともなると16倍の3200MHz=3.2GHzと、CPUのクロック数と同等レベルになります。いやぁすごいですね・・・

 

動作速度(周波数=Hz)と実際のデータ転送速度の関係

先ほどまで、動作速度に関して○○MHzというように周波数としてのみ表現してましたが、周波数で言われても困りますよね。やっぱり、実践的に知りたい情報は○○GByte/s のように、一秒当たりのデータ転送量ではないでしょうか?

でも、「周波数 ⇔ データ転送速度」の変換は、理由を知れば簡単にできます。

例えば800MHzで動作するDDR3-800のデータ転送量は、6.4GB/sとなり、単純計算でDVD2枚弱分のデータを1秒でやり取りできることになります。DDR4-3200にもなると、25.6GB/s となりDVD5枚半くらいのデータを1秒でやり取りできる計算になります。

計算方法は、

メモリが1度にやり取りできるデータ量は64bit=8Byteです。よって、800MHzのDDR3の場合は、1秒間に8億回の動作が可能なので、800MHz * 8 = 6400MHz = 6.4GB/sec となるのです。他の場合も同じです。

 

メモリ表記の意味

メモリに対して一通りの知識を蓄えたとこで、最後にメモリの表記について軽く見ましょう。

チップ規格とモジュール規格

DDR○のようにDDRに続く数字でDDR規格の世代を表しています。現在の主流はDDR3です。これをチップ規格といいます。

DDR3-○○のように、さらに数字が続きます。これは、そのメモリの最大動作周波数であり、普通はここからデータ転送速度などを求めます。DDR3-1600という製品ならば、1600MHzで動作することを表しています。

PC○のようにPCに続く数字によってこのメモリのモジュール規格を表しています。DDR2=>PC2, DDR3=>PC3 という関係になっています。これをモジュール規格といいます。チップ規格とモジュール規格は一緒に表示されてる場合は、それぞれ他方だけ表示されてることなどありますので、メモリ購入の際は注意して見ましょう。

PC3-○○のように、続いている数字はデータ転送量をそのまま表しています。PC3-6400ならば、6400MB/s=6.4GB/s となります。

 

正直、事実上、DDR3-800 = PC3-6400 であり、相互に導き出せるので2つの規格表記が必要なの?と思う所ですが、あくまで動作する周波数とデータ転送量を分けているのでしょうね(適当)。

というのも、DDR3-800の転送速度が6.4GB/sであると分るのは、メモリの1回のデータ転送量が64bitという前提があるからです。もしも、32bitだったなら、同じチップ規格DDR3-800であっても転送量は3.2GB/sと半減しますし、128bitなら逆に倍増しますね。こういう背景が関係しているのではないでしょうかね・・・

 

駆動電圧

何気に、メモリの駆動電圧というのも気になる指標になります。というのも、ノートPCなどではバッテリー持ちに少なからず関わる事項ですので、定電圧に越したことはありません。

メモリの駆動電圧はメモリチップ規格の表記に示されています。

メモリチップ 駆動電圧
DDR3-○○ 1.5V
DDR3L-○○ 1.35V
DDR3U-○○ 1.25V
LPDDR3-○○ 1.2V

※メモリが低電圧対応していても、メモリスロットやマザーボード側が対応していないと動作しません。

メモリの概要はこんな感じです。メモリの動作周波数について少し触れましたが、たとえ DDR3-1600 のメモリを購入しても、PCのメモリスロット側が800MHz の対応だと、メモリも1600MHzではなく800MHzとして下位互換で動作します。

 

結局何なの?

基本的にメモリには下位互換性といって、PC側のメモリスロット規格がDDR3-800の場合、DDR3-1333のメモリを購入して装着すれば、低速なメモリスロット側に合わせてDDR3-800として動作します。

また電圧に関して言えば、DDR3Lのメモリは大概通常の1.5Vでも動くよう対応しています。つまり、先ほどとまとめると、メモリスロット側DDR3-800にDDR3L-1333をセットすれば、DDR3-800(1.5V)ととして動作するはずなのです。しかしながら、メモリは普通は2枚指しますし、相性などもあります。なので出来るだけメモリスロットの規格に合ったものを購入するのが確実です。

知りたいのはそれだけなんだよっ!!

初めからそれだけ言えっ、て話ですよねw