はじめに、キャッシュメモリから触れておきます。
CPUに内蔵される「キャッシュメモリ」とは、CPUとメインメモリ(主記憶装置)の間で命令やデータなどの情報をリードライトする際に、これらの中間に入る「高速小容量メモリ」です。
これで、メインメモリの遅延や低帯域幅を隠蔽します。
一度、メインメモリからロードされたデータは、一時的にキャッシュメモリにコピーされます。
次に同じデータをロードする機会には、メインメモリではなく高速なキャッシュメモリから読み込みます。
これで高速ロードを実現します。(キャッシュヒット)
なぜキャッシュメモリが必要かというと、CPUとメインメモリとの性能があまりにもかけ離れているからに他なりません。
大昔のCPU、例えば1980年代のCPUは、動作クロックが33Mhz程度でしたので、このくらいであればメインメモリはCPUが要求する性能を満たすことができました。
しかし、倍クロック技術の登場で、CPUの性能が飛躍的に向上すると、たちまちメインメモリの遅さが性能のボトルネックになってしまいました。
メインメモリへのアクセスが発生するたびに、CPUに待ち時間が出来てしまうので、その性能を十分に発揮できないのです。
このころから、CPUにはキャッシュメモリが搭載されるようになりました。
メインメモリも高速化を果たしてきましたが、それ以上にCPUも高速化してきたため、メインメモリが性能のボトルネックとなる状態は現在も解消されていません。
そのため、CPUの性能を維持するうえで、キャッシュメモリが重要な要素となっています。
目次
キャッシュメモリ
キャッシュメモリの性能
メインメモリとキャッシュメモリとの間には、次に挙げるような性能差があります。
☆ロード命令を実行してからデータが来るまでの待ち時間(遅延)
・メインメモリーーー約30~100ns(ナノ秒)以上
・キャッシュメモリーーー約1ns~20ns以下
☆データが到着してからの転送スピード(帯域幅)
・メインメモリーーー約10GB/s~20GB/s
・キャッシュメモリーーー約100GB/s~500GB/s
ざっと、10倍以上の性能差があり、メインメモリへのアクセス発生(キャッシュミス)が、いかにペナルティであるかを想像できます。
L1,L2,L3の違い
キャッシュメモリには容量に限りがあるため、新しいデータをロードすると、使用頻度の低いデータからどんどん消えてしまいます。
キャッシュメモリから消えたデータへのアクセスは、「キャッシュミス」となり、再びメインメモリへのアクセスが生じます。
キャッシュミスを防ぐには、容量を大きくするのが最も効果的です。しかし、キャッシュメモリには大雑把に言うと「容量が増えると速度が落ちる」という特性があるので、無闇に大容量化もできません。
そこで、最近のCPUは段階的にキャッシュメモリを搭載し、パフォーマンスを維持しつつも、できるだけメインメモリへのアクセスを減らすような構成になっています。
CPUのスペック表を見てみると、「L1キャッシュ」「L2キャッシュ」といった具合に、いくつかのキャッシュメモリの存在を確認できます。
L1は「Level1」の意味で、CPUコア側に最も近い位置にあるキャッシュメモリをL1キャッシュと呼びます。
L1キャッシュの役割
CPUコアに最も近いL1キャッシュは、とにかく超高速であることが重要です。
その代わり容量がとても小さく、Core iプロセッサを例にすると、1コアあたり「L1命令キャッシュ32KB」「L1データキャッシュ32KB」しかありません。
(命令とデータにキャッシュを分けていることで、高速化しています。)
L2キャッシュの役割
L1キャッシュは超高速ですが、いかんせん容量が小さすぎるということで、次に用意されるのが「L2キャッシュ」です。
中容量中速度のL2キャッシュを用意することで、L1キャッシュとメインメモリとの大きすぎる差を吸収するのが目的です。
L2キャッシュの容量は「数百KB~2MB」程度が主流で、「命令」と「データ」の区別はありません。
L3キャッシュの役割
昨今のコンピューティングは「マルチスレッド」が当たり前で、規模も大きくなったため、数百KBのL2キャッシュでは効果が薄くなりがちです。
そこで登場するのが、キャッシュの中では低速(メインメモリよりは格段に速い)ではありますが、大容量なL3キャッシュです。
L3キャッシュの容量はMBオーダーで、高いグレードのCPUはL3キャッシュが大容量という性能の差別化にもなっています。
Core iプロセッサでは、グレード別で「2~8MB」のL3キャッシュを搭載します。
各レベルのキャッシュの配置については、L1とL2はCPUの各コアに搭載され、L3は全コア共通で搭載されているのが主流です。
グラフィックメモリ
GDDR規格について
グラフィックボードには「GDDR」と呼ばれるメモリが多く搭載されています。
「DDR」が「DDR,DDR2,DDR3,DDR4」と世代を重ねるごとに転送速度を倍増させてきたのに対して、「GDDR」は、最初から「GDDR3」という名前で登場しました。
また、「DDR3 SDRAM」とも無関係で、技術的には「クロック信号1周期につき、2ビットを転送する」という意味では「DDR」の技術そのものであり、技術的枠組みとしては「DDR2」に類似しています。
GDDRの実質的な第二世代は「GDDR5」です。
GDDR4はDDR2をベースとしたGDDR3を置き換えるべく、DDR3をベースに開発されました。
しかし、製品出荷後1年を経たずして、GDDR5の登場によって消え去ってしまいました。
GDDR5も、GDDR4と同様にDDR3をベースとしており、8ワードをプリフェッチすることで、メモリクロックの8倍の転送速度を実現しています。
※ワードとは、「ひとまとまりのデータ」を指しており、現在のPC技術では基本的に「64ビット」の事を指しています。
CPUの場合、メモリバス幅は基本「64ビット」、デュアルチャンネルでも「128ビット」ですが、GPUの場合にはアーキテクチャ自体が異なり、上位機種ではメモリバス幅「256ビット」以上のものも少なくありません。
これだけで、転送速度は64ビットの4倍となるため、単純比較はできませんが、GDDR5を利用したグラフィックボードでは、プリフェッチ8ワードで、
・メモリバスクロックーーー600Mhz
・データ転送回数ーーー1200MT/sec(逆算すると実メモリクロック150Mhz)
・メモリバス幅ーーー256ビット(32B)
程度で動作しているようです。
これを計算してみると、
1200(MT/sec)×32B=38400MB/sec=30.72Gbps
となります。
DDR SDRAM
SDRAMの基本的な仕組み
「SDRAM」は、”Synchronous Dynamic Random Access Memory”の略で、「システムバス」(FSBなどの高速バス)が持っている「クロック」と同期して転送するタイプのDRAMになります。
※DRAMは自由に読み書きできるRAMの一種
このクロックの「1サイクル」につき1回、ひとまとまりのデータである「ワード」を送るというのがSDRAMの基本技術です。
SDRAMのチップそのものについては、データバス幅は「4ビット」「8ビット」「16ビット」と様々ですが、これらをモジュール化して、「64ビット」をひとまとまりのワードとして転送しています。
クロックが「100Mhz」であれば、「100MTps」(1億回通信/sec)となるので、1回に「1ワード」となれば、64ビットを転送することになるので、
100M×8B=800MB/sec
の計算となります。
DDRの基本的な仕組み
「DDR」は、「Double-Data-Rate」の名の示す通り、データ転送速度が2倍になる仕組みのことです。
具体的には、メモリ自体のクロックが「100Mhz」であれば、クロックは「短形波」の信号で与えられ、立ち上がりから立下り、そして次の立ち上がりまでの時間を「1クロック」と計算します。
「DRAM」自体の内部クロックとして用いることのできる周波数は、DRAMの半導体プロセスの物理的な限界から「200Mhz」あたりが限界とされています。
そこで、DDRでは、「DIMM」の内部の「メモリセルアレイ」を2系統設けて、1クロックで2ワードを読み出します。
※DIMMとは、基板の端子部の表裏に別々の信号を流すことができるメモリモジュールです。
DIMMの内部インターフェースには、読みだしたワードを一時保存する「ラッチ」という機構があります。
このラッチも、DDRでは2ワードぶん用意されています。
このラッチに読み出しデータを転写することを「プリフェッチ」と呼び、通常の2倍のデータをプリフェッチすることで、2倍速の読み出しが実現するわけです。
そして、クロックの立ち上がりと立ち上がりの両方のタイミングで、1ワードずつ外部インターフェースへと転送、つまり1クロックに2ワードが転送されることになります。
バスクロックが100Mhzなら、転送は200Tpsになり、1600MB/secとなります。
DDR2~DDR4の各世代
この各世代の違いについて触れてみます。
実は、各世代でプリフェッチするワード数が倍々ゲームで増えているだけで、DDRの基本的な仕組みは同じになります。
つまり、
DDRが2ワード、
DDR2が4ワード、
DDR3が8ワード、というわけです。
ただし1点、DDR4以降はメモリチップを4つのグループに分けて、各グループで「8ワードのプリフェッチ」が可能です。
DDR4では、2つの異なるグループにアクセスして、トータルで「16ワードのプリフェッチ」になえうケースでは、純粋にメモリクロックの16倍の転送回数が得られます。
しかし、同じグループに属する場合は、8ワードのプリフェッチが終了したのち、再度同じグループに命令を発行しなくてはならないため、若干のオーバーヘッドが生じるようです。
いずれにせよ、DDRの世代番号をnとすれば、
チップクロックの「2n倍」の転送速度となっている。
と考えてほとんど問題ありません。
ROM
大きく2種類に分けられる半導体メモリ
現在のコンピューターで用いられている半導体メモリは、記憶保持の仕組みの違いで、大きく2種類に分けられています。
1つは「RAM」です。
RAMは一般的に電力を供給している間のみ、記憶を保持する事のできるメモリのことで、このような性質を「揮発性」と呼びます。
RAMは比較的高速に読み書きが可能なことから、コンピュータのメインメモリや、キャッシュメモリなどに用いられています。
そしてもう1つが、「ROM」です。
ROMはRAMと異なり、電力を供給しなくても記憶を保持し続ける事が出来、これを「不揮発性」と呼びます。
ROMはRAMより低速なため、その不揮発性が必要となる場面で用いられることになります。
ROMの用途
組み込みコンピュータ
で電源を供給しなくても記憶を保持し続けることができるため、電子機器のファームウェアといった組み込み用途に広く用いられています。
ソフト供給媒体
古くはファミコンのカセット、近年では任天堂3DSのカードなど、主に家庭用ゲーム機におけるディスクメディア以外のソフト供給媒体として、ROMが用いられています。
ストレージデバイス
ROMといっても、その名前のまま「読み出し専用」(Read Only)というわけではありません。ある程度自由にデータの消去、書き換えが可能なROMも存在します。
中でも特に高速な読み書きが可能な「フラッシュメモリ」は、USBメモリやSSDといったコンピュータのメインストレージの役割を担って、広く普及しています。
ROMの種類
ROMの中でも、データの書き換え方法の違いで、いくつかの種類に分けられます。
マスクROM
半導体製造時に用いる「マスクパターン」を変更することで、集積回路の配線パターンを制御し、配線パターンそのもので情報を記憶するタイプのROMです。
ROMの製造時点で情報が書き込まれるため、同じ内容のROMを大量生産する際ののコスパに優れています。
書き込み内容は容易に変更できないことから、次第に用いられなくなっています。
PROM
PROMは、ROMライタという特殊な機械を用いて、ユーザーやメーカーが一度だけ書き込みできるROMです。
書き込み時に強い電流を流すことでPROM無いのヒューズを溶解し、情報を記憶するタイプが主流でした。
EEPROM
EEPROMは、電気だけで消去と書き込みが可能なROMです。
データを書き換える際には、一旦高い電圧を加えて記憶内容を飛ばしてから、新たにデータを書き込むといった手順を踏みます。
システムに組み込んだままで書き換えが可能なため、コンピュータの「BIOS」や電子機器のファームウェアとして広く用いられていました。
フラッシュメモリ
基本的な原理はEEPROMと同じであるため、「フラッシュEEPROM」とも呼ばれます。
EEPROMは1バイト単位での書き換えを行っていましたが、フラッシュメモリでは書き換えの単位を1つずつではなく、「数10KB単位」とすることで、回路を簡略化しています。
この改良によってEEPROMでは難しかった大容量化と、EEPROMと比較して1000倍以上となる書き込み速度の高速化を実現できました。
書き換え可能回数は製品によって異なり、「数千回~10万回程度」とされています。
先にふれたように、フラッシュメモリは不揮発性と高速書き換えの特性を活かし、ストレージデバイスとして広く用いられています。
現在ではROMを必要とするほとんどの場面において主流となっており、最も身近なROMだと言えます。
また、フラッシュメモリは次世代の主流「ストレージデバイス」として、積極的に大容量化や高速化の研究開発が行われているのも特徴です。
RAMとROMの定義について
最初の説明で、RAMは揮発性、ROMは不揮発性と定義しましたが、一般的にもそのような認識が多いと思われます。
しかし、次世代のメインメモリとして研究が進められている「MRAM」などの新しい半導体メモリは、名称に「RAM」を冠しながらも不揮発性という特徴を持っています。
このことから、半導体メモリを単純に揮発性と不揮発性に分けるのではなく、読み出しと書き込みを同等に出来るものをRAM、基本読み出しが主で、書き換える際には特別な動作が必要となるものをROMと呼ぶ、というように解釈したほうが適しているかもしれません。