CPUはコンピュータの動作に必要なデータやプログラムを主記憶装置(DRAMなどのメモリ)との間で常時やり取りしています。しかし、CPUの動作に比べるととてもメモリは遅いので、CPUがメモリからデータを読み込んだり、書き込んだりする度にメモリの処理が終わるの待つ時間が発生してしまいます...
そこで、登場するのが「キャッシュメモリ」です!
このキャッシュメモリは主記憶装置のメモリよりも、高速に読み書きができるもので、CPUと主記憶装置(メモリ)の間に置いて、CPUの待ち時間を減らすことに役立ちます。
今回はこのキャッシュメモリの役割と共に、「ヒット率」、「実効アクセス時間」というキーワードも学んでみましょう!
キャッシュメモリの役割とは?
冒頭でも述べましたが、キャッシュメモリはCPUと主記憶装置(※メモリと書くとややこしいので主記憶装置とします)の間に配置されます。以下の図のようなイメージですね。
キャッシュメモリをCPUと主記憶装置の間に置くことで、CPUがデータを読み出すときの動きが以下のようになります。
データ読み出しの流れ
- CPUが主記憶装置から読み込むデータは、キャッシュメモリにも同時に保持されます。
- 次の同じデータをCPU読み込む時は、高速で動作するキャッシュメモリからデータを取得することができます。
次にCPUがデータを主記憶装置に書き込む時は以下のような2パターンがあります。
データ書き込みの流れ
- ライトスルー方式:キャッシュメモリにデータを書き込む時に主記憶装置にも同じデータを書き込みます。これにより、データの一貫性が保持されます。
- ライトバック方式:普段はキャッシュメモリだけにデータを書き込み、キャッシュメモリがいっぱいになったら主記憶装置に書き出します。この方式は処理が速くなりますが、その分制御が大変です。
ライトバックとライトスルーに関しては以下の記事にて詳しく記載してます!
このようにキャッシュメモリを活用することで、コンピュータ処理全般を高速にすることができていますね。
ヒット率と実効アクセス時間とは?
キャッシュメモリは容量が小さいので、全てのデータを保持することができません。そうなると,
やはりCPUはキャッシュメモリからデータを取得する時と、主記憶装置からデータを取得する場合に分かれます。
では、CPUがデータを取得する時に必要なアクセス時間はどうなるのでしょうか?
実はその計算はそんなに難しくはありません!
キャッシュメモリにCPUが必要とするデータが存在する確率のことを「ヒット率」と呼びます。反対に主記憶装置にしかデータが存在しない確率は「1-ヒット率」になります。
この確率とキャッシュメモリ、主記憶装置にアクセスするために掛かる時間を使うと以下のような値を算出することができます。
主記憶装置にアクセスするための時間
- キャッシュメモリにアクセスする時間 = キャッシュメモリのアクセス時間 × ヒット率
- 主記憶装置にアクセスする時間 = 主記憶装置のアクセス時間 × (1 - ヒット率)
この二つを足すとコンピュータの平均的なアクセス時間である「実効アクセス時間」を算出することができます。
「 実効アクセス時間 = ① + ② 」
上記例においてキャッシュメモリのアクセス時間が「10ナノ秒」、主記憶装置へのアクセス時間が「60ナノ秒」だとすると、
「実行アクセス時間 = 10×0.7+60×0.3 = 25ナノ秒」となりますね。
まとめ
今回はキャッシュメモリとヒット率、実行アクセス時間の関係に関して解説してきました。
キャッシュメモリのヒット率と実効アクセス時間のまとめ
- キャッシュメモリを使うことでCPUとのやり取りを速くできる
- ①キャッシュメモリにアクセスする時間 = キャッシュメモリのアクセス時間 × ヒット率
- ②主記憶装置にアクセスする時間 = 主記憶装置のアクセス時間 × (1 - ヒット率)
- 実行アクセス時間 = 上記① + 上記②
コンピュータの高速処理にキャッシュメモリは非常に大事ですが、小さい容量のキャッシュメモリ内を有効活用するために、よく使われる可能性のあるデータを選定する仕組み(局所参照性)が使われていますが、それは別の機会に記事にしたいと思います。
そして、1次キャッシュ、2次キャッシュとありますが、2次キャッシュはCPUの外に出してSRAMで構成していたりします。
因みにキャッシュメモリより速いメモリは「CPUの中のレジスタ」ですね。
机の引き出しの中をキレイにして、必要なものを直ぐに取り出し易くしているのと同じようなイメージですね。私の机の中はかなりごちゃごちゃしてますが(汗)
以上です!