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

270 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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性能参数计算]]