8.1 KiB
8.1 KiB
第二章 缓存优化 - 考试考点精细化梳理
考点分级
【必考核心考点】
1. Cache平均访存时间公式(计算题必考)
核心考法:计算题(★★★★★)
标准公式:
平均访存时间 = 命中时间 + 不命中率 × 不命中开销
或更精确的公式(考虑写操作):
平均访存时间 = 命中时间 + 不命中率 × (不命中开销 + 写不命中处理开销)
扩展公式(含存储器停顿时):
CPU时间 = IC × (CPIexecution + 每条指令平均访存次数 × 不命中率 × 不命中开销) × 时钟周期时间
考题类型:
- 给定命中时间、不命中率、不命中开销,求平均访存时间
- 结合CPU时间公式计算性能提升倍数
- 比较不同Cache组织的性能优劣
解题步骤:
- 识别题目给出的参数(命中时间、不命中率、不命中开销)
- 代入公式计算平均访存时间
- 如需计算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的不命中次数,求局部/全局不命中率
- 计算平均访存时间
- 计算每条指令的平均停顿时间
解题步骤:
- 先算L1的全局不命中率 = N(L1) / 总访存
- 再算L2的局部不命中率 = N(L2) / N(L1)
- 计算全局不命中率(L2) = N(L2) / 总访存
- 代入两级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的命中时间、不命中率、不命中开销,计算平均访存时间并比较。
解题思路:
- 分别计算两种结构的平均访存时间
- 考虑时钟周期增加因子(如组相联可能时钟周期更长)
- 综合比较,注意单位统一
易错易混点:
- 认为相联度越高越好
- 忽略命中时间增加的影响
- 时钟周期增加10%可能在某些情况下反而让直接映像更快
5. 伪相联Cache(了解即可)
核心考法:选择题、填空题(★★★☆☆)
原理:先按直接映像查找,未命中时再按另一路查找
平均访存时间公式:
命中时间伪相联 = 命中时间1路 + 伪命中率 × 2
伪命中率 = 失效率1路 - 失效率2路
6. 写策略与写分配策略(选择题高频)
核心考法:选择题、填空题(★★★☆☆)
四种组合:
| 写策略 | 写分配策略 | 特点 |
|---|---|---|
| 写直达 | 写分配 | 每次写都更新下一级存储器 |
| 写直达 | 写不分配 | 跳过Cache直接写主存 |
| 写回 | 写分配 | 只更新Cache,替换时写回 |
| 写回 | 写不分配 | 跳过Cache直接写主存 |
考试重点:
- 理解写直达和写回的区别
- 理解写分配和不分配的区别
- 应用场景选择
常见陷阱:
- 混淆"写分配"和"写回"的概念
- 误以为写分配只用于写回法
【了解考点】
7. 降低不命中率的8种方法
考法:选择题、简答题
8种方法:
- 增大块大小
- 增大Cache容量
- 提高相联度
- 减少强制不命中(预取)
- 减少容量不命中(增大容量)
- 减少冲突不命中(提高相联度)
- 编译器优化(软件预取)
- 写合并
典型计算题解题示范
例题(类似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.33,CPU时间增加为原来的1.67倍。
本章核心公式速记
1. 平均访存时间 = 命中时间 + 不命中率 × 不命中开销
2. CPI = CPIexecution + 每条指令平均访存次数 × 不命中率 × 不命中开销
3. 全局不命中率 = 该级不命中次数 / CPU总访存次数
4. 局部不命中率 = 该级不命中次数 / 到达该级的访存次数
5. 两级Cache平均访存时间 = 命中时间L1 + 不命中率L1 × (命中时间L2 + 不命中率L2 × 不命中开销L2)