精简版 · 小杯2026-08 冻结,已停止更新(发布前修订了 4 处已知错误)。后续勘误与新增内容只在正式版。看正式版(中杯)→
Skip to content

Cache性能分析

考情分析

Cache 性能综合计算题在 408 大题中出现频率高,常结合映射方式、替换算法、写策略一起考查,需要建立完整的分析框架。

大纲定位

考纲第三章(六)「高速缓冲存储器(Cache)」,性能计算贯穿全部四条。

要求到什么程度:能算命中率、平均访问时间、Cache 总容量,能处理多级 Cache。平均访问时间有两种模型,先判再算是本篇的核心。

单级 Cache 性能

符号与基本定义

先把符号钉死,后面所有公式都用这套:

符号含义
H命中率 =NN访
1H缺失率(miss rate)。命中率 + 缺失率 =1
tcCache 命中时的访问时间(命中时间
tm主存访问时间
ta平均访问时间(AMAT)
缺失损失一次未命中相对命中多付出的时间,不含 tc

编者注(易错):题目给"缺失率 5%"时命中率是 95%,别直接把 5% 当命中率代进公式——这是选择题最常设的坑。

基本公式回顾

同时访问模型(CPU 同时启动 Cache 和主存,命中则取消主存访问):

ta=Htc+(1H)tm

先访问 Cache 模型(未命中时串行访问主存):

ta=tc+(1H)tm

做题第一步:从题面判用哪个模型

题目不一定明说,靠措辞识别:

题面出现用哪条
「同时/并行启动 Cache 和主存」「命中则中止主存访问」ta=Htc+(1H)tm
「先访 Cache,未命中再访主存」「缺失后从主存调入」ta=tc+(1H)tm
只给「命中时间」和「缺失损失/缺失代价ta=+×(即串行式)

第三行最常见于近年大题,且题干通常一句模型也不说。此时「缺失损失」是相对命中的额外开销,一次缺失总代价 = 命中时间 + 缺失损失。

性能加速比

S=tmta

表示加入 Cache 后,访存速度提高了多少倍。

tc=5 ns,tm=100 ns,H=0.98(同时访问模型):

ta=0.98×5+0.02×100=4.9+2=6.9 nsS=1006.914.5

多级 Cache

现代 CPU 通常有 L1、L2(甚至 L3)Cache。

双级 Cache 模型

设 L1 Cache 命中率 H1,L2 Cache 命中率 H2(指在 L1 未命中的情况下,L2 的命中率),主存访问时间 tm

局部命中率与全局命中率

  • H1:全局命中率(所有访问中 L1 命中比例)
  • H2:局部命中率(L1 未命中的访问中 L2 命中比例)
  • L2 全局命中率:(1H1)H2

反向换算也要会:题目若直接给出 L2 的全局命中率 G2,代入公式前必须先还原成局部命中率:

H2=G21H1

多级也分两种模型,和单级是同一回事:

同时访问: ta=H1tc1+(1H1)[H2tc2+(1H2)tm]串行访问: ta=tc1+(1H1)[tc2+(1H2)tm]

编者注(易错):区别就在 tc1 是提在括号外(串行,每次访问都先付 L1 时间)还是乘在 H1 上(同时)。单级部分强调过要分模型,多级同样要分——别到多级就默认套一条。

平均访问时间

ta=H1tc1+(1H1)[H2tc2+(1H2)tm]

或展开:

ta=H1tc1+(1H1)H2tc2+(1H1)(1H2)tm

三级存储系统(含 L1/L2/主存)

层次访问时间命中率
L1 Cachet1(~1 ns)H1(~0.9)
L2 Cachet2(~5 ns)H2(~0.9,局部)
主存tm(~100 ns)

例题t1=2 ns,t2=10 ns,tm=200 ns,H1=0.9H2=0.8

ta=0.9×2+0.1×(0.8×10+0.2×200)=1.8+0.1×(8+40)=1.8+4.8=6.6 ns

综合计算题解题模板

408 中 Cache 综合题通常给出以下信息:

  1. 主存容量和地址位数
  2. Cache 容量、行数、块大小
  3. 映射方式(直接/全相联/组相联)
  4. 替换算法
  5. 写策略

解题步骤:

第一步:确定地址分段(tag / index / offset 各多少位)

offset=log2(块大小(字节))index={log2(行数)直接映射log2(组数)k路组相联0全相联tag=主存地址位数indexoffset

算完位数还要写成位区间——真题问的常常是"这几个字段各占地址的哪几位",只给位数不给区间会丢分。从第 0 位起由低到高排:

offset=[b1:0],index=[b+s1:b],tag=[m1:b+s]

m 为地址总位数,b 为 offset 位数,s 为 index 位数。)

第二步:计算 Cache 总存储容量(含标记位)

每行存储内容:

1+ttag+8×+[1]+[log2k]

总容量 = 行数 × 每行位数

编者注(易漏)替换算法位经常被忘。k 路组相联用计数器实现 LRU 时每行需 log2k 位——8 路是 3 位log28),不是 8 位。题目提到替换算法就要算进去,没提就不加。

第三步:计算命中率或平均访问时间

第四步:分析地址映射关系(某个主存地址对应 Cache 的哪行/哪组)

常见例题类型

类型1:给定主存地址,判断 Cache 行号

直接映射:

Cache 行号=主存地址块大小modN

类型2:计算 Cache 总容量(含标记)

这是大题中经常被忽略的部分,每行除了数据还有:

  • 1 位有效位(Valid)
  • tag 位(标记)
  • 1 位脏位(写回策略)

类型3:计算访问主存的次数

给定访问序列和 Cache 状态,按步骤模拟,统计未命中次数。

典型综合例题

Cache 容量 32 KB,4 路组相联,块大小 32 B,主存 32 位地址(字节寻址),写回策略。

  1. offset = log232=5
  2. 总行数 = 32KB/32B=1024 行;组数 = 1024/4=256
  3. index = log2256=8
  4. tag = 3285=19
  5. 每行大小 = 1(有效位)+ 1(脏位)+ 19(tag)+ 32×8(数据)= 277 位
  6. Cache 总存储容量 = 1024 × 277 bit = 283648 bit ≈ 34.6 KB(比数据容量 32 KB 多约 8%)

交互可视化

加载可视化中...

易混淆知识点

1. Cache 缺失和缺页是一回事吗?

不是。Cache 缺失(miss)是 CPU 访问 Cache 未命中,需要从主存调入数据块,由硬件自动处理,对程序透明,延迟约几十纳秒。缺页(page fault)是访问虚拟内存时页面不在主存中,需要从磁盘调入,由操作系统处理(触发缺页异常),延迟约几毫秒。二者层次不同,处理机制不同。

2. Cache 块大小越大越好吗?

不是。块大小增大的利:利用了空间局部性,一次调入更多相邻数据。弊:①总行数减少(Cache 容量固定),可能增加冲突缺失;②每次缺失的传输时间变长;③可能调入大量无用数据。实际设计需要在命中率和缺失代价之间权衡。

3. "同时访问"和"先 Cache 后主存"两个模型哪个更快?

同时访问模型更快——命中时等效访问时间就是 tc,不命中时等效为 tm(因为主存访问已经同步启动)。但硬件代价更高。先 Cache 后主存模型更简单,但不命中时延迟为 tc+tm。做题时注意题目是哪种模型。

考点清单

  • 同时访问模型与先访问 Cache 模型的区别,注意题目说明
  • 多级 Cache:局部命中率用于逐级计算,全局命中率 = 到该级命中比例
  • Cache 总容量(含标记)= 行数 × (有效位 + tag位 + 数据位 + 脏位)
  • 性能加速比 S=tm/ta,H 越高 S 越大
  • 命中率从 0.9 提升到 0.99,性能提升显著,但从 0.99 提升到 0.999 边际效益递减
  • Cache 缺失由硬件处理,缺页由操作系统处理

真题练习