9.4 KiB
tags, create time
| tags | create time | ||||
|---|---|---|---|---|---|
|
2026-06-16 21:21 |
大题 4 — Cache 性能计算
概述
本题考查 Cache 的性能计算,包括平均访存时间(AMAT)、CPU 时间的计算,以及分离 Cache vs 混合 Cache 的性能对比。这是 Cache 专题的核心计算题,历年考试中频繁出现。
[!tip] 考试重点 核心公式
AMAT = 命中时间 + 不命中率 × 不命中开销必须烂熟于心。分离 Cache 与混合 Cache 的对比计算是 A 卷原题(16 分),务必反复练习。
正文
一、核心公式体系
graph TD
AMAT["AMAT = Hit Time + Miss Rate x Miss Penalty"]
AMAT --> HT["Hit Time"]
AMAT --> MR["Miss Rate"]
AMAT --> MP["Miss Penalty"]
CPU["CPU Time = IC x (CPIexe + Mem x MR x MP) x tau"]
CPU --> IC["IC: Instruction Count"]
CPU --> CPI["CPIexe: Base CPI"]
CPU --> MEM["Mem: Memory Access per Instruction"]
CPU --> tau["tau: Clock Period"]
1.1 平均访存时间
AMAT = \text{命中时间} + \text{不命中率} \times \text{不命中开销}
| 符号 | 含义 | 典型单位 |
|---|---|---|
AMAT |
平均访存时间 | 周期 / ns |
| 命中时间 | Cache 命中时的访问时间 | 周期 |
| 不命中率 | 访问不命中的概率 | % |
| 不命中开销 | 不命中时从下级存储取数据的代价 | 周期 |
1.2 多级 Cache 的 AMAT
AMAT = HT_{L1} + MR_{L1} \times (HT_{L2} + MR_{L2} \times MP_{L2})
[!note] 全局不命中率 vs 局部不命中率
- 局部不命中率:该级 Cache 自身的不命中率 = 该级不命中次数 / 该级总访问次数
- 全局不命中率:该级 Cache 的不命中率 = 该级不命中次数 / CPU 总访存次数
MR_{global,L2} = MR_{L1} \times MR_{L2,local}
1.3 CPU 时间与 Cache 的关系
CPU 时间 = IC \times (CPI_{exe} + \text{每条指令访存次数} \times \text{不命中率} \times \text{不命中开销}) \times \tau
等价地:
CPU 时间 = IC \times CPI_{eff} \times \tau
其中 CPI_{eff} = CPI_{exe} + \text{访存 stall CPI}
\text{访存 stall CPI} = \text{每条指令访存次数} \times \text{不命中率} \times \text{不命中开销}
二、分离 Cache vs 混合 Cache(A 卷原题)
[!example] 例题 1(参考例 7.2 / A 卷 16 分大题)
已知条件:
- 程序中 78% 为取指令访问,22% 为数据访问(load/store)
- 不命中开销均为 40 周期
方案一:分离 Cache(指令 16KB + 数据 16KB = 共 32KB)
- 指令 Cache 不命中率
mr_I = 1\%- 数据 Cache 不命中率
mr_D = 5\%- 命中时间 = 1 周期(独立端口,无冲突)
方案二:混合 Cache(统一 32KB)
- 整体不命中率
mr = 1.5\%- 取指命中时间 = 1 周期
- load/store 命中时间 = 2 周期(共享端口,需额外仲裁)
问题:哪种方案的平均访存时间更短?
Step 1:分离 Cache 的平均访存时间
AMAT_{分离} = 78\% \times (1 + 0.01 \times 40) + 22\% \times (1 + 0.05 \times 40)= 0.78 \times (1 + 0.4) + 0.22 \times (1 + 2.0)= 0.78 \times 1.4 + 0.22 \times 3.0= 1.092 + 0.660 = \mathbf{1.752 \text{ 周期}}
Step 2:混合 Cache 的平均访存时间
AMAT_{混合} = 78\% \times (1 + 0.015 \times 40) + 22\% \times (2 + 0.015 \times 40)= 0.78 \times (1 + 0.6) + 0.22 \times (2 + 0.6)= 0.78 \times 1.6 + 0.22 \times 2.6= 1.248 + 0.572 = \mathbf{1.820 \text{ 周期}}
Step 3:比较与结论
方案 平均访存时间 分离 Cache 1.752 周期 混合 Cache 1.820 周期 分离 Cache 更优(1.752 < 1.820),虽然混合 Cache 的不命中率更低(1.5% < 加权 1.88%),但 load/store 的额外命中时间(+1 周期)抵消了这个优势。
[!question] 什么时候混合 Cache 更好? 如果 load/store 的额外命中时间小于 1 周期(如 0.5 周期),或者混合 Cache 的不命中率显著低于分离方案(如 0.5% vs 1.88%),混合方案可能更优。具体需要代入数值计算。
三、CPI 与 Cache 性能的综合计算
[!example] 例题 2(参考习题 7.10 / B 卷 16 分大题风格)
已知条件:
- 处理器基本 CPI(理想 Cache 无缺失)= 2.5
- 时钟周期 = 2 ns
- 每条指令平均访存 1.5 次
- 不命中开销 = 90 个时钟周期
- 命中时间 = 1 个时钟周期
方案 A:直接映像 Cache → 不命中率 1.5%
方案 B:两路组相联 Cache → 不命中率 1.2%,但时钟周期增加 10%
选择哪个方案?
Step 1:方案 A — 直接映像
时钟周期 = 2 ns(不变)
AMAT_A = 1 + 0.015 \times 90 = 1 + 1.35 = 2.35 \text{ 周期}CPI_{eff,A} = 2.5 + 1.5 \times 0.015 \times 90 = 2.5 + 2.025 = 4.525CPU 时间_A = IC \times 4.525 \times 2\text{ns} = 9.05 \times IC \text{ (ns)}
Step 2:方案 B — 两路组相联
时钟周期 =
2 \times 1.1 = 2.2ns(增加 10%)AMAT_B = 1 + 0.012 \times 90 = 1 + 1.08 = 2.08 \text{ 周期}CPI_{eff,B} = 2.5 + 1.5 \times 0.012 \times 90 = 2.5 + 1.62 = 4.12CPU 时间_B = IC \times 4.12 \times 2.2\text{ns} = 9.064 \times IC \text{ (ns)}
Step 3:比较与结论
方案 CPI 时钟(ns) CPU 时间(ns/IC) AMAT(周期) 直接映像 4.525 2.0 9.050 2.35 两路组相联 4.12 2.2 9.064 2.08 虽然两路组相联的 AMAT 更低(2.08 < 2.35),但由于时钟周期增长 10%,最终 CPU 时间反而略高(9.064 > 9.050)。
结论:选择直接映像 Cache。性能差异很小(0.15%),但直接映像硬件更简单、面积更小、功耗更低。
[!note] B 卷原题的另一种计算方式
B 卷原题中给出的条件略有不同(命中时间为 0.8 周期),计算过程:
AMAT = 0.8 + MR \times 90需要将 AMAT 转换为 ns 后再计算 CPU 时间:
CPU 时间 = IC \times (CPI \times \tau + \text{访存次数} \times MR \times MP \times \tau)
四、地址位分解计算
[!example] 例题 3:地址位分解(配合选择题/填空题)
已知:32 位地址,Cache 容量 32KB,块大小 64B,8 路组相联。
字段 位数 计算方法 Offset 6 \log_2(64) = 6Set Index 6 \log_2(\frac{32\text{KB}}{64\text{B} \times 8}) = \log_2(64) = 6Tag 20 32 - 6 - 6 = 20关键步骤:
- 先算 Offset = $\log_2$(块大小)
- Cache 行数 = Cache 容量 / 块大小 =
32\text{KB} / 64\text{B} = 512- 组数 = Cache 行数 / 相联度 =
512 / 8 = 64- Set Index = $\log_2$(组数) =
\log_2(64) = 6- Tag = 地址总位数 - Set Index - Offset =
32 - 6 - 6 = 20
五、练习题
[!example] 练习 1
某处理器 CPI = 2.0,时钟 1GHz,每条指令访存 1.4 次。Cache 命中时间 1 周期,不命中率 3%,不命中开销 50 周期。求有效 CPI 和 CPU 执行 10^8 条指令的时间。
[!abstract]- 答案 访存 stall CPI
= 1.4 \times 0.03 \times 50 = 2.1有效 CPI
= 2.0 + 2.1 = \mathbf{4.1}CPU 时间
= 10^8 \times 4.1 / (10^9) = \mathbf{0.41 \text{ 秒}} = 410 \text{ ms}
[!example] 练习 2
分离 Cache:指令 8KB(不命中率 0.8%),数据 8KB(不命中率 4%)。程序 70% 取指,30% 数据访问。不命中开销 100 周期,命中时间 1 周期。求平均访存时间。
[!abstract]- 答案
AMAT = 70\% \times (1 + 0.008 \times 100) + 30\% \times (1 + 0.04 \times 100)
= 0.7 \times 1.8 + 0.3 \times 5.0 = 1.26 + 1.50 = \mathbf{2.76 \text{ 周期}}
[!example] 练习 3(综合)
某程序
10^6条指令,CPI = 1.8,时钟 2GHz,每条指令平均访存 1.2 次。
Cache 方案 容量 不命中率 命中时间 不命中开销 A 16KB 4% 1 周期 80 周期 B 32KB 2% 2 周期 80 周期 哪个方案的 CPU 时间更短?
[!abstract]- 答案 A:
CPI_{eff} = 1.8 + 1.2 \times 0.04 \times 80 = 1.8 + 3.84 = 5.64
T_A = 10^6 \times 5.64 / (2 \times 10^9) = 2.82msB:
CPI_{eff} = 1.8 + 1.2 \times 0.02 \times 80 = 1.8 + 1.92 = 3.72
T_B = 10^6 \times 3.72 / (2 \times 10^9) = 1.86ms方案 B 更优(1.86 ms < 2.82 ms),虽然命中时间更长但不命中率低很多。
六、3C 模型与优化技术对应表
| 不命中类型 | 原因 | 优化技术 | 对 AMAT 的影响 |
|---|---|---|---|
| 强制性 | 首次访问 | 增大块大小、预取 | 减少不命中率 |
| 容量 | Cache 太小 | 增大容量 | 减少不命中率 |
| 冲突 | 映射冲突 | 提高相联度、Victim Cache | 减少不命中率 |
[!warning] 权衡思维 几乎每种优化都有副作用:增大块大小可能增加不命中开销;提高相联度增加命中时间;增大容量增加命中时间和成本。考试中需要计算后比较,不能只看一个指标。