Files
final-exam/计算机系统结构/重点复习/大题4-Cache性能计算.md
T

9.4 KiB
Raw Blame History

tags, create time
tags create time
计算机系统结构
重点复习
Cache
性能计算
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.525 CPU 时间_A = IC \times 4.525 \times 2\text{ns} = 9.05 \times IC \text{ (ns)}

Step 2:方案 B — 两路组相联

时钟周期 = 2 \times 1.1 = 2.2 ns(增加 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.12 CPU 时间_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) = 6
Set Index 6 \log_2(\frac{32\text{KB}}{64\text{B} \times 8}) = \log_2(64) = 6
Tag 20 32 - 6 - 6 = 20

关键步骤:

  1. 先算 Offset = $\log_2$(块大小)
  2. Cache 行数 = Cache 容量 / 块大小 = 32\text{KB} / 64\text{B} = 512
  3. 组数 = Cache 行数 / 相联度 = 512 / 8 = 64
  4. Set Index = $\log_2$(组数) = \log_2(64) = 6
  5. 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.82 ms

B: 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.86 ms

方案 B 更优(1.86 ms < 2.82 ms),虽然命中时间更长但不命中率低很多。

六、3C 模型与优化技术对应表

不命中类型 原因 优化技术 对 AMAT 的影响
强制性 首次访问 增大块大小、预取 减少不命中率
容量 Cache 太小 增大容量 减少不命中率
冲突 映射冲突 提高相联度、Victim Cache 减少不命中率

[!warning] 权衡思维 几乎每种优化都有副作用:增大块大小可能增加不命中开销;提高相联度增加命中时间;增大容量增加命中时间和成本。考试中需要计算后比较,不能只看一个指标。

关联笔记