Files
2026-05-16 17:16:51 +08:00

8.1 KiB
Raw Permalink Blame History

第二章 缓存优化 - 考试考点精细化梳理


考点分级

【必考核心考点】

1. Cache平均访存时间公式计算题必考

核心考法:计算题(★★★★★)

标准公式

平均访存时间 = 命中时间 + 不命中率 × 不命中开销

或更精确的公式(考虑写操作):
平均访存时间 = 命中时间 + 不命中率 × (不命中开销 + 写不命中处理开销)

扩展公式(含存储器停顿时)

CPU时间 = IC × (CPIexecution + 每条指令平均访存次数 × 不命中率 × 不命中开销) × 时钟周期时间

考题类型

  • 给定命中时间、不命中率、不命中开销,求平均访存时间
  • 结合CPU时间公式计算性能提升倍数
  • 比较不同Cache组织的性能优劣

解题步骤

  1. 识别题目给出的参数(命中时间、不命中率、不命中开销)
  2. 代入公式计算平均访存时间
  3. 如需计算CPU时间注意单位统一时钟周期

常见陷阱

  • 将不命中率当作命中率使用
  • 混淆"不命中开销"和"命中时间"的单位
  • 在多级Cache系统中混淆局部不命中率和全局不命中率

易错易混点

  • 全局不命中率 = 该级不命中次数 / CPU总访存次数
  • 局部不命中率 = 该级不命中次数 / 到达该级的访存次数

答题模板

解:根据平均访存时间公式
平均访存时间 = 命中时间 + 不命中率 × 不命中开销

已知:命中时间 = ___不命中率 = ___不命中开销 = ___

代入:
平均访存时间 = ___ + ___ × ___ = ___

答平均访存时间为___个时钟周期。

踩分细则

  • 正确写出公式1分
  • 识别并代入正确参数2分
  • 计算过程正确2分
  • 最终答案及单位正确1分

2. 两级Cache性能分析计算题高频

核心考法:计算题(★★★★☆)

核心公式

全局不命中率(L1) = 不命中次数(L1) / CPU总访存次数
全局不命中率(L2) = 不命中次数(L2) / CPU总访存次数
局部不命中率(L2) = 不命中次数(L2) / 不命中次数(L1)

平均访存时间(L1+L2) = 命中时间(L1) + 不命中率(L1) × [命中时间(L2) + 不命中率(L2) × 不命中开销(L2)]

考题类型

  • 给定L1和L2的不命中次数求局部/全局不命中率
  • 计算平均访存时间
  • 计算每条指令的平均停顿时间

解题步骤

  1. 先算L1的全局不命中率 = N(L1) / 总访存
  2. 再算L2的局部不命中率 = N(L2) / N(L1)
  3. 计算全局不命中率(L2) = N(L2) / 总访存
  4. 代入两级Cache平均访存时间公式

易错易混点

  • 混淆局部不命中率和全局不命中率
  • L2的局部不命中率是以L1不命中次数为基数不是总访存次数
  • 注意单位统一ns vs 时钟周期)

答题模板

解:
(1) 计算不命中率:
L1不命中率全局= ___ / ___ = ___%
L2局部不命中率 = ___ / ___ = ___%
L2全局不命中率 = ___ / ___ = ___%

(2) 计算平均访存时间:
平均访存时间 = 命中时间(L1) + 不命中率(L1) × [命中时间(L2) + 局部不命中率(L2) × 不命中开销(L2)]
= ___ + ___% × [___ + ___% × ___]
= ___

(3) 计算每条指令平均停顿时间:
每条指令平均停顿 = (平均访存时间 - 命中时间L1) × 每条指令访存次数
= ___

答平均访存时间为___个时钟周期每条指令平均停顿___个时钟周期。

3. 3C不命中分类选择题/填空题必考)

核心考法:选择题、填空题、简答题(★★★★★)

三种不命中类型

类型 全称 发生原因 解决方案
Compulsory 强制不命中 第一次访问某块 预取、增大块大小
Capacity 容量不命中 Cache容量有限 增大Cache容量
Conflict 冲突不命中 直接映射/组相联中的映射冲突 增加相联度、增大Cache

考试重点

  • 给定场景能判断属于哪种不命中
  • 区分三种不命中的根本原因
  • 理解降低不命中率的方法分别针对哪种不命中

常见陷阱

  • 将容量不命中和冲突不命中混淆
  • 误以为增加相联度能解决容量不命中

答题话术

3C不命中是指Cache的三种不命中类型
1. 强制不命中Compulsory也称首次不命中当数据第一次被访问时必然发生
2. 容量不命中Capacity由于Cache容量有限一段时间内访问的数据无法全部容纳
3. 冲突不命中Conflict在直接映射或组相联Cache中多个数据块竞争同一组的位置

降低不命中率的方法:
- 增加块大小 → 主要减少强制不命中
- 增加Cache容量 → 主要减少容量不命中
- 提高相联度 → 主要减少冲突不命中

得分要点:能正确说出三种不命中的名称、原因和主要解决措施即可得分。


【高频考点】

4. 直接映像 vs 组相联Cache比较计算题/分析题)

核心考法:计算题、分析题(★★★★☆)

比较维度

  • 不命中率:组相联 < 直接映像
  • 命中时间:直接映像 < 组相联(因为多路选择器延迟)
  • 综合性能:需结合具体参数分析

常见考题 给出两种Cache的命中时间、不命中率、不命中开销计算平均访存时间并比较。

解题思路

  1. 分别计算两种结构的平均访存时间
  2. 考虑时钟周期增加因子(如组相联可能时钟周期更长)
  3. 综合比较,注意单位统一

易错易混点

  • 认为相联度越高越好
  • 忽略命中时间增加的影响
  • 时钟周期增加10%可能在某些情况下反而让直接映像更快

5. 伪相联Cache了解即可

核心考法:选择题、填空题(★★★☆☆)

原理:先按直接映像查找,未命中时再按另一路查找

平均访存时间公式

命中时间伪相联 = 命中时间1路 + 伪命中率 × 2
伪命中率 = 失效率1路 - 失效率2路

6. 写策略与写分配策略(选择题高频)

核心考法:选择题、填空题(★★★☆☆)

四种组合

写策略 写分配策略 特点
写直达 写分配 每次写都更新下一级存储器
写直达 写不分配 跳过Cache直接写主存
写回 写分配 只更新Cache替换时写回
写回 写不分配 跳过Cache直接写主存

考试重点

  • 理解写直达和写回的区别
  • 理解写分配和不分配的区别
  • 应用场景选择

常见陷阱

  • 混淆"写分配"和"写回"的概念
  • 误以为写分配只用于写回法

【了解考点】

7. 降低不命中率的8种方法

考法:选择题、简答题

8种方法

  1. 增大块大小
  2. 增大Cache容量
  3. 提高相联度
  4. 减少强制不命中(预取)
  5. 减少容量不命中(增大容量)
  6. 减少冲突不命中(提高相联度)
  7. 编译器优化(软件预取)
  8. 写合并

典型计算题解题示范

例题类似Alpha AXP例题

假设Cache不命中开销为50个时钟周期当不考虑存储器停顿时所有指令的执行时间都是2.0个时钟周期访问Cache不命中率为2%平均每条指令访存1.33次。求有Cache时的CPI和性能提升倍数。

标准解题

解:
CPI有Cache = CPIexecution + 每条指令平均访存次数 × 不命中率 × 不命中开销
          = 2.0 + 1.33 × 2% × 50
          = 2.0 + 1.33
          = 3.33

性能提升倍数 = CPI有Cache / CPIexecution = 3.33 / 2.0 = 1.67倍

答有Cache时的CPI为3.33CPU时间增加为原来的1.67倍。

本章核心公式速记

1. 平均访存时间 = 命中时间 + 不命中率 × 不命中开销
2. CPI = CPIexecution + 每条指令平均访存次数 × 不命中率 × 不命中开销
3. 全局不命中率 = 该级不命中次数 / CPU总访存次数
4. 局部不命中率 = 该级不命中次数 / 到达该级的访存次数
5. 两级Cache平均访存时间 = 命中时间L1 + 不命中率L1 × (命中时间L2 + 不命中率L2 × 不命中开销L2)