L1/L2/L3 キャッシュ
英語表記: L1/L2/L3 Cache
概要
L1/L2/L3 キャッシュとは、CPU(中央処理装置)の処理速度と、メインメモリ(DRAM)のアクセス速度の間に存在する大きな隔たりを埋めるために設計された、階層的な高速メモリ群のことです。これらは「マイクロアーキテクチャ」における「メモリサブシステム」の中核を担い、CPUコアのすぐ近くに配置されています。具体的には、L1(レベル1)が最も小さく高速でCPUコアに直結し、L2、L3とレベルが下がるにつれて容量は増えますが、アクセス速度はわずかに遅くなります。この多段階のキャッシュ設計(キャッシュ設計)により、CPUは必要なデータを可能な限り高速に取得できるようになり、システム全体のパフォーマンス向上に不可欠な役割を果たしているのです。
詳細解説
キャッシュ階層の目的と背景(メモリサブシステムとの関連)
現代のCPUコア(Intel 64, ARM, RISC-Vなどのマイクロアーキテクチャに基づく)は、ナノ秒レベルの非常に速い速度で動作します。しかし、メインメモリへのアクセスには数十ナノ秒以上かかってしまうため、もしCPUが毎回メインメモリまでデータを取りに行くと、ほとんどの時間を待機に費やしてしまいます。これを「メモリウォール(記憶の壁)」と呼びます。
L1/L2/L3キャッシュの存在意義は、このメモリウォールを打ち破り、CPUが常に高速なデータ供給を受けられるようにすることにあります。これは「メモリサブシステム」全体の効率を決定づける重要な要素です。
階層構造と動作原理
キャッシュは、アクセス頻度の高いデータを一時的に保存するために、「局所性の原理」に基づいて動作します。局所性の原理には、「時間的局所性」(一度使ったデータはまたすぐに使われる可能性が高い)と「空間的局所性」(使ったデータ周辺のデータもすぐに使われる可能性が高い)の2種類があります。
1. L1 キャッシュ(レベル1)
L1キャッシュは、最もCPUコアに近く、最速のメモリです。通常、CPUの動作クロックと同じ速度か、それに近い速度で動作します。L1は非常に小さく、数KBから数十KB程度の容量しかありませんが、これは処理の実行に直ちに必要となるデータを格納するためです。
特に重要な点として、L1キャッシュは命令(Instruction)キャッシュとデータ(Data)キャッシュに分離されていることが多いです。これは、命令のフェッチ(取り出し)とデータの読み書きを同時に行うことで、パイプライン処理の効率を最大限に高めるためであり、マイクロアーキテクチャの設計思想が強く反映されています。
2. L2 キャッシュ(レベル2)
L2キャッシュは、L1より容量が大きく、速度はわずかに遅くなります。容量は数百KBから数MB程度が一般的です。L1でキャッシュミスが発生した場合、次にL2にデータを探しに行きます。L2は、L1を支援し、L1がカバーできなかった局所性の高いデータを保持する役割を果たします。多くの高性能なマイクロアーキテクチャでは、L2も各コア専用に設けられています。
3. L3 キャッシュ(レベル3)
L3キャッシュは、L1/L2の中で最も容量が大きく(数MBから数十MB)、速度は最も遅いですが、メインメモリよりは遥かに高速です。L3の最大の特徴は、CPUダイ上の全コアで共有される点です。
この「共有」という特性が、マルチコア環境におけるデータの一貫性(キャッシュコヒーレンシ)の維持に非常に重要になります。あるコアが変更したデータを、別のコアがすぐに参照できるように、L3はメモリサブシステム全体のデータ管理センターとして機能するのです。L3キャッシュの容量と効率は、特にサーバーやハイエンドPCにおけるマルチタスク性能や並列処理性能を大きく左右するため、マイクロアーキテクチャ設計者にとって非常に注力するポイントとなっています。
このように、L1、L2、L3と段階的に速度と容量を調整することで、全体のデータアクセス効率を最適化しているのが、現代の「キャッシュ設計」の核心です。
具体例・活用シーン
1. アナロジー:職場のデスクと倉庫
L1/L2/L3キャッシュの階層構造は、私たちが職場で作業する際のデータアクセス方法に例えると非常に分かりやすいです。
CPUコア = あなた自身(作業者)
メインメモリ(DRAM) = 遠くにある巨大な倉庫
- L1 キャッシュ = 作業中のデスクの上
- 今まさに使っている書類や道具(数十個)だけが置かれています。最もアクセスが速いですが、容量は極めて限られています。
- L2 キャッシュ = デスクのすぐ横にある引き出し
- 現在進行中のプロジェクトで必要な資料(数百個)が整理されています。デスクの上よりは少し探すのに時間がかかりますが、すぐに手が届きます。
- L3 キャッシュ = 部署全体で共有する大きなキャビネット
- 他の同僚(他のCPUコア)と共有する、頻繁に参照される資料全体(数千個)が収められています。少し歩く必要がありますが、倉庫(メインメモリ)まで行くよりは圧倒的に速いです。
もし必要な情報がL1(デスクの上)にあれば瞬時に作業が続行できます(キャッシュヒット)。しかし、L1になければL2、L2になければL3と探しに行き、最終的にL3にもなければ、非常に遠い倉庫(メインメモリ)まで取りに行かざるを得ません(キャッシュミス)。このアナロジーから、L1/L2/L3の階層が、いかに作業(処理)を中断させないように設計されているかが理解できるかと思います。
2. 高性能計算(HPC)における役割
大規模なデータ解析やAIのディープラーニングなど、膨大なデータを扱う高性能計算(HPC)の分野では、L3キャッシュの容量が非常に重要視されます。これらの計算は、非常に大きなデータセットに対して繰り返し処理を行うため、「空間的局所性」の恩恵を最大限に受ける必要があります。L3キャッシュが大きいほど、より多くの作業データをCPUの近くに保持できるため、メインメモリへのアクセス頻度が減り、結果として計算時間が大幅に短縮されます。これは、高性能なマイクロアーキテクチャの性能を支える、目に見えない土台なのです。
資格試験向けチェックポイント
ITパスポート試験、基本情報技術者試験、応用情報技術者試験において、L1/L2/L3キャッシュは「メモリサブシステム」や「マイクロアーキテクチャ」の効率に関する必須の知識として問われます。
| 項目 | L1 キャッシュ | L2 キャッシュ | L3 キャッシュ |
| :— | :— | :— | :— |
| 場所 | CPUコア内(最も近い) | CPUコアまたはCPUダイ上 | CPUダイ上(全コア共有) |
| 速度 | 最速(CPUクロックとほぼ同速) | L1より遅い | L2より遅い(メインメモリより遥かに速い) |
| 容量 | 最小(数十KB程度) | 中間(数百KB~数MB) | 最大(数MB~数十MB) |
| 主な役割 | 命令実行直前のデータ保持(命令/データ分離) | L1の補助、局所性の高いデータ保持 | 全コア間のデータ共有と整合性(コヒーレンシ)の維持 |
- 最重要概念:局所性の原理
- キャッシュが存在する根拠である「時間的局所性」と「空間的局所性」は、必ず理解しておきましょう。
- 頻出問題パターン:速度と容量の対応付け
- 「最も高速だが容量が小さいのはL1」「全コアで共有され、容量が最も大きいのはL3」といった、特性とレベルの対応関係を問う問題が頻出します。
- 応用情報向け:キャッシュコヒーレンシ
- L3キャッシュが複数のコア間でデータを共有する際、データの矛盾が生じないように制御する仕組み(キャッシュコヒーレンシ)の概念が問われることがあります。これは、マルチコア時代の「メモリサブシステム」設計の難しさを理解する上で重要です。
- キャッシュミスとヒット率
- キャッシュに必要なデータがあった場合を「キャッシュヒット」、なかった場合を「キャッシュミス」と呼びます。ヒット率(ヒットした割合)が高いほど、システムの性能が高いことを示します。
関連用語
この「マイクロアーキテクチャ(Intel 64, ARM, RISC-V) → メモリサブシステム → キャッシュ設計」の文脈を深く理解するためには、以下の関連用語の知識も非常に重要になりますが、現在、これらの用語に関する情報が不足しています。
- 情報不足:
- メモリウォール(Memory Wall)
- キャッシュコヒーレンシ(Cache Coherency)
- DRAM(Dynamic Random Access Memory)
- レジスタ(Register)
- ライトバック方式/ライトスルー方式(Write-back / Write-through)