キャッシュメモリ:CPUとメインメモリの高速化

目次
キャッシュメモリとは?仕組み・階層・アルゴリズム・最適化
キャッシュメモリは、 CPUとメインメモリ(DRAM)の速度差を埋めるために設計された 極めて重要なメモリです。
現代のコンピュータにおいては、 CPUの性能を最大限に引き出すために キャッシュの設計と挙動を理解することが不可欠です。
本記事では、 キャッシュメモリの基本から内部構造、 アルゴリズム、パフォーマンス特性まで詳細に解説します。
キャッシュメモリとは何か
キャッシュメモリとは、
高速なSRAMを用いて、頻繁にアクセスされるデータを一時的に保持する仕組み
です。
CPUはまずキャッシュを参照し、 存在しなければメインメモリにアクセスします。
なぜキャッシュが必要か(メモリウォール問題)
CPUとメモリの速度差は非常に大きく、
メモリウォール
と呼ばれる問題が存在します。
例:
- CPU:数GHz(ナノ秒)
- DRAM:数十〜数百ns
この差を埋めるのがキャッシュです。
メモリ階層
| 層 | 種類 | 速度 | 容量 |
|---|---|---|---|
| L1 | SRAM | 最速 | 小 |
| L2 | SRAM | 高速 | 中 |
| L3 | SRAM | やや遅い | 大 |
| メインメモリ | DRAM | 遅い | 非常に大 |
局所性(Locality)
キャッシュは、 以下の性質を利用しています。
- 時間的局所性(Temporal Locality)
- 空間的局所性(Spatial Locality)
これにより、 高いヒット率を実現します。
キャッシュの基本構造
キャッシュは以下で構成されます。
- キャッシュライン(Cache Line)
- タグ(Tag)
- データ領域
一般的に64バイト単位で管理されます。
マッピング方式
ダイレクトマップ
- 1つの場所にのみ配置
- 高速・競合が発生しやすい
セットアソシアティブ
- 複数候補から選択
- バランス型
フルアソシアティブ
- どこでも配置可能
- 高コスト・高柔軟性
キャッシュ置換アルゴリズム
キャッシュが満杯の場合、 どのデータを置き換えるかを決定します。
- LRU(Least Recently Used)
- FIFO
- ランダム
ライトポリシー
ライトスルー(Write-through)
- 常にメモリへ書き込み
- 整合性が高い
ライトバック(Write-back)
- キャッシュ内で保持
- 遅延書き込み
- 高速だが複雑
キャッシュヒットとミス
キャッシュアクセス結果:
- ヒット:高速アクセス
- ミス:DRAMアクセス(遅い)
ミスの種類:
- コンパルソリミス
- 容量ミス
- 競合ミス
キャッシュコヒーレンシ
マルチコア環境では、 データの整合性が問題になります。
代表例:
- MESIプロトコル
これにより、 複数コア間でのデータ整合性が保たれます。
プリフェッチ
将来アクセスされるデータを予測して読み込む技術です。
効果:
- レイテンシ隠蔽
キャッシュラインと偽共有
異なるスレッドが同一ラインを共有すると、
偽共有(False Sharing)
が発生します。
性能低下の原因となります。
TLB(Translation Lookaside Buffer)
仮想アドレス変換を高速化するキャッシュです。
性能指標
- ヒット率
- ミス率
- ミスペナルティ
実効アクセス時間:
平均時間 = ヒット時間 + ミス率 × ミスペナルティ
最適化のポイント
- 連続アクセスを意識
- データ構造の配置
- キャッシュライン境界の考慮
キャッシュとプログラム設計
キャッシュを意識した設計は、 性能に大きな影響を与えます。
- ループ最適化
- ブロッキング
- データ局所性の改善
最新動向
- 大容量L3/L4キャッシュ
- 3D積層キャッシュ
- チップレット設計
まとめ
キャッシュメモリは、 CPU性能を最大化するための重要な仕組みです。
- SRAMによる高速アクセス
- 局所性を活用
- 階層構造で性能向上
さらに、
- 置換アルゴリズム
- ライトポリシー
- コヒーレンシ
を理解することで、 システムやアプリケーションの性能を最適化できます。
キャッシュの理解は、 高性能プログラミングの基盤となります。





