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

キャッシュメモリ

キャッシュメモリとは?仕組み・階層・アルゴリズム・最適化

キャッシュメモリは、 CPUとメインメモリ(DRAM)の速度差を埋めるために設計された 極めて重要なメモリです。

現代のコンピュータにおいては、 CPUの性能を最大限に引き出すために キャッシュの設計と挙動を理解することが不可欠です。

本記事では、 キャッシュメモリの基本から内部構造、 アルゴリズム、パフォーマンス特性まで詳細に解説します。

キャッシュメモリとは何か

キャッシュメモリとは、

高速なSRAMを用いて、頻繁にアクセスされるデータを一時的に保持する仕組み

です。

CPUはまずキャッシュを参照し、 存在しなければメインメモリにアクセスします。

なぜキャッシュが必要か(メモリウォール問題)

CPUとメモリの速度差は非常に大きく、

メモリウォール

と呼ばれる問題が存在します。

例:

  • CPU:数GHz(ナノ秒)
  • DRAM:数十〜数百ns

この差を埋めるのがキャッシュです。

メモリ階層

種類速度容量
L1SRAM最速
L2SRAM高速
L3SRAMやや遅い
メインメモリ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による高速アクセス
  • 局所性を活用
  • 階層構造で性能向上

さらに、

  • 置換アルゴリズム
  • ライトポリシー
  • コヒーレンシ

を理解することで、 システムやアプリケーションの性能を最適化できます。

キャッシュの理解は、 高性能プログラミングの基盤となります。