Skip to content

约 751 个字 1 行代码 4 张图片 预计阅读时间 4 分钟 共被读过

lec15-缓存系统


1. 内存层次结构与缓存基础

关键概念

  • 处理器-DRAM 延迟差距:2020 年 CPU 在 DRAM 访问时间内可执行约 1000 条指令,而 1980 年仅为 1:1。
  • 内存层次结构
  • 层级:寄存器 → 缓存 → 主存 → 磁盘
    image.png

  • 越靠近处理器:容量越小、速度越快、成本越高。

  • 局部性原理
  • 时间局部性:近期访问的数据可能被重复使用。
  • 空间局部性:邻近内存地址的数据可能被连续访问。

2. 缓存基本操作

缓存行为

  • 缓存命中:数据在缓存中找到(直接返回)。
  • 缓存缺失:数据不在缓存中 → 从内存获取,更新缓存后返回。
  • 缓存行/块:缓存与内存间数据传输的最小单位(如 4 字节块)。

示例:带缓存的内存访问

Text Only
lw t0, 0(t1)  # 加载地址 0x12F0 处的字(t1=0x12F0)
  1. 缓存检查地址 0x12F0
  2. 命中:直接从缓存返回数据。
  3. 缺失:从内存获取数据,更新缓存后返回。

3. 缓存映射技术

3.1 全关联缓存

  • 结构
  • 数据块可存储在任何缓存行。
  • 地址分解:标签 | 字节偏移
  • 有效位:标记缓存行是否包含有效数据。
  • 示例
    image.png

  • 替换策略:最近最少使用(LRU)。

3.2 直接映射缓存

  • 结构
  • 每个数据块映射到唯一的缓存行。
  • 地址分解:标签 | 索引 | 字节偏移
  • 索引:决定缓存行位置。
  • 示例
    image.png
  • 冲突缺失:多个数据块映射到同一索引时发生。

3.3 组关联缓存

  • 结构
  • 全关联与直接映射的折中方案。
  • 缓存划分为组(如 2 路组关联:每组 2 行)。
  • 地址分解:标签 | 索引 | 字节偏移
  • 示例
    image.png
  • 替换策略:组内使用 LRU。

4. 缓存策略

写策略

  • 写直达
  • 同时写入缓存和内存。
  • 简单但内存流量高。
  • 写回
  • 仅写入缓存,标记为“脏”。
  • 仅在替换时写回内存(流量更低)。

替换策略

  • LRU(最近最少使用):跟踪访问历史,替换最久未使用的行。
  • MRU(最近最多使用):与 LRU 相反(较少使用)。

5. 地址分解示例

全关联缓存(12 位地址)

组件 位数 示例(0x43F)
标签 10 0x10F
字节偏移 2 0x3

直接映射缓存(12 位地址)

组件 位数 示例(0xFE2)
标签 8 0xFE
索引 2 0x0
字节偏移 2 0x2

6. 硬件需求

  • 全关联缓存:需要所有行的比较器(成本高)。
  • 直接映射缓存:基于索引的简单查找(成本低但易冲突)。
  • 组关联缓存:平衡成本与性能(如 2 路组关联每组使用 2 个比较器)。

7. 性能考量

  • 缺失惩罚:从低层存储获取数据的时间。
  • 命中率:对整体性能至关重要(通过预取和局部性优化)。
  • 多级缓存:L1(小/快)→ L2(较大/较慢)→ L3(共享)。