--- tags: - 计算机系统结构 - 重点复习 - Cache - 性能计算 create time: 2026-06-16 21:21 --- # 大题 4 — Cache 性能计算 ## 概述 本题考查 **Cache 的性能计算**,包括**平均访存时间**(AMAT)、**CPU 时间**的计算,以及**分离 Cache vs 混合 Cache** 的性能对比。这是 Cache 专题的核心计算题,历年考试中频繁出现。 > [!tip] 考试重点 > 核心公式 `AMAT = 命中时间 + 不命中率 × 不命中开销` 必须烂熟于心。分离 Cache 与混合 Cache 的对比计算是 A 卷原题(16 分),务必反复练习。 ## 正文 ### 一、核心公式体系 ```mermaid 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] 权衡思维 > 几乎每种优化都有副作用:增大块大小可能增加不命中开销;提高相联度增加命中时间;增大容量增加命中时间和成本。考试中需要**计算后比较**,不能只看一个指标。 ## 关联笔记 - [[计算机系统结构/复习文档/存储系统与Cache]] - [[小题7-Cache不命中与3C模型]] - [[小题6-组相联映射与标识存储器]] - [[大题1-CPU性能参数计算]]