キャッシュ・メモリ (cache memory)
アクセス速度を高速化するために用意された、小容量ながらも高速なメモリ。
コンピュータ・システムでは、プロセッサとメイン・メモリの間でデータ転送が頻繁に発生する。このときプロセッサの処理速度とメモリのアクセス速度に差がある場合には、全体の速度は低速な側のデバイスに支配されてしまう。つまり、低速なデバイス側がボトルネックとなり、高速なデバイスは低速デバイスが処理を終えるのを待たなければならない。
こうした問題を解消し、低速なデバイスの性能が、システム全体に及ぼす影響を少なくするために使われるメカニズムをキャッシュといい、キャッシュのために使われるメモリをキャッシュ・メモリという。メイン・メモリをすべて高速なメモリで構成すれば、キャッシュ・メモリは不要であるが、実際にはこのような高速なメモリは非常に高価で、大量の実装も困難であり、現実的ではない。そこで、メインのメモリとしてはやや低速ながらも安価なDRAMを使い、さらに小容量ながらも高速なメモリをキャッシュ・メモリとして用意することによって、パフォーマンスの低下を抑えることができる。
プロセッサがメモリにアクセスする場合、まず最初にキャッシュ・メモリを調べて、もしその中にアクセスしたいデータがあれば(キャッシュにヒットするという)、それを使う。しかし、キャッシュにデータが入っていなければ(キャッシュ・ミスという)、遅いメイン・メモリからデータをアクセスすることになる。一般にプロセッサの処理は、ある短い時間で見ると、アクセスされているアドレス空間の範囲はあまり広くなく、ある程度集中している(局所性の原理)。そのため、ある程度のキャッシュ・メモリの量があれば、パフォーマンスの大幅な低下を防ぐことができる。キャッシュ・ミスした場合は、メイン・メモリからアクセスを行なうが、通常はこの時に、キャッシュ・ミスしたデータだけでなく、その近くにある数十bytesのデータも同時もアクセスし、それをキャッシュに格納しておく。局所性の原理から、こうしておくことで、次回のアクセスではキャッシュにヒットする確率が高くなる。
システムの構成によっては、パフォーマンスを改善するためにキャッシュ・メモリを階層的に構築することもある。たとえばIntel製x86プロセッサのPentium IIは最高で450MHzという高速なクロック速度で動作するが、このプロセッサに内蔵された多数の実行ユニットが最高の効率で動作するためには、450MHzのアクセス速度で命令コードをフェッチしたり、メモリからデータを読み書きしたりする必要がある。しかしこのような速度で動作するメモリは非常に高価であり、また技術的にもプロセッサの外部に実装することは非常に難しい。そこでPentium IIでは、プロセッサ・コアと同じダイ上に、命令コードとデータ用にそれぞれ16Kbytesのキャッシュを内蔵している。これを1次キャッシュと呼ぶ。1次キャッシュは、CPUクロック(450MHz)に同期して動作する。
1次キャッシュは非常に高速であるが、容量が少ないため、キャッシュにヒットする確率が低い。そこでPentium IIでは、プロセッサ・コアを搭載した同一基板上に、512Kbytesの2次キャッシュを実装し、キャッシュのヒット率を向上させている。2次キャッシュは、プロセッサ・コアの1/2のクロック周波数に同期して動作するため、1次キャッシュよりは遅いが、メイン・メモリよりは十分に速く、その効果は大きい。
システムによっては3段階目のキャッシュまで搭載される場合がある。たとえばサーバの場合、システムによっては4基以上のマルチプロセッサ構成で使用されることがある。このとき、8基あるいはそれ以上のプロセッサを1つのメイン・メモリに接続すると、各プロセッサからのアクセスでバスが飽和し、そこが性能上のボトルネックになりやすい。そこでこうした大規模なサーバ製品では、プロセッサ内部のキャッシュ・メモリとは別に、数十Mbytesの3次キャッシュを搭載することでシステム全体の性能向上を図っている。
Copyright (C) 2000-2007 Digital Advantage Corp.
参考リンク
-
■[連載]頭脳放談:第3回 ミスの代償−−2次キャッシュの効用(PC Insider)
キャッシュ・メモリに関する詳細な技術解説記事