Skip to content

408

计算机组成原理

CO-03-08 Cache基本原理与命中率计算


一、定位信息

项目内容
所属圈层核心层
前置知识回顾需了解SRAM的工作原理(CO-03-02),了解存储器层次结构中Cache的位置(位于CPU和主存之间),了解程序局部性原理(时间局部性和空间局部性)
知识网络定位本单元是Cache系列知识(CO-03-08~10)的开篇,建立Cache的基本概念框架。Cache命中率计算是后续映射方式(CO-03-09)和替换算法(CO-03-10)的定量基础,也是考研必考的计算题型
考点热度等级H级 — Cache命中率计算和基本原理是每年必考的核心考点,近5年出现≥5次,选择题和计算题均常见

二、知识点讲解

2.1 Cache的由来与作用

CPU速度远快于主存速度(CPU执行一条指令约1ns,主存访问约50~100ns),如果CPU每次取数据都要等待主存,将严重浪费CPU时间。

Cache的作用:在CPU和主存之间放置一个容量小但速度快的存储器(用SRAM实现),将近期可能用到的数据和指令预先存放在Cache中。当CPU访问存储器时,先查Cache;如果数据在Cache中(命中),则快速读取;如果不在(未命中),再访问主存,并将包含目标数据的一个数据块调入Cache。

理论基础——局部性原理

  • 时间局部性:刚访问过的数据很可能很快再次被访问(循环变量、频繁调用的函数)
  • 空间局部性:刚访问过的数据的相邻数据很可能很快被访问(数组顺序遍历、顺序执行指令)

2.2 Cache的工作流程

当CPU发出读请求(给出主存地址)时:

  1. 查找Cache:将主存地址与Cache中存储的标签(Tag)进行比较
  2. 判断命中
    • 命中(Hit):Cache中有该地址对应的数据,直接将数据送CPU
    • 未命中(Miss):Cache中没有该数据,访问主存
  3. 未命中处理:从主存取出包含目标数据的整个数据块(Cache行/Cache Line),送入Cache,同时将目标数据送CPU
  4. 后续访问:由于空间局部性,该数据块中的其他数据很可能很快被访问

2.3 Cache命中率

命中率 hh:CPU访问Cache命中的概率。

h=Cache命中次数总访问次数h = \frac{\text{Cache命中次数}}{\text{总访问次数}}

未命中率(失效率)1h1 - h

命中率的影响因素

  • Cache容量:容量越大,命中率越高(但收益递减)
  • Cache行大小(块大小):适当增大行大小可提高命中率(利用空间局部性),但过大会降低命中率(可能装入无用数据)
  • 映射方式:全相联 > 组相联 > 直接映射(命中率从高到低)
  • 替换算法:LRU通常优于FIFO和随机替换
  • 程序本身的局部性特征

2.4 Cache-主存系统的平均访问时间

命中时访问时间 = Cache访问时间 tct_c未命中时访问时间 = Cache访问时间 + 主存访问时间 tc+tmt_c + t_m(先查Cache再访问主存,串行方式)

ta=htc+(1h)(tc+tm)=tc+(1h)tmt_a = h \cdot t_c + (1-h) \cdot (t_c + t_m) = t_c + (1-h) \cdot t_m

另一种常见公式(简化模型,假设命中时只访问Cache,未命中时只访问主存):

ta=htc+(1h)tmt_a = h \cdot t_c + (1-h) \cdot t_m

注意:两种公式对应不同的系统模型。考试中需根据题目描述选择正确的公式。如果题目说"先访问Cache,未命中再访问主存",用第一个公式;如果题目说"Cache和主存同时访问"或给出简化的命中/未命中时间,用第二个公式。

2.5 Cache的性能指标

加速比 rr

r=tmtar = \frac{t_m}{t_a}

表示使用Cache后,访问时间缩短为原来的 1/r1/r

访问效率 ee

e=tcta=tctc+(1h)tme = \frac{t_c}{t_a} = \frac{t_c}{t_c + (1-h) \cdot t_m}

表示Cache访问时间在平均访问时间中的占比。ee 越接近1,Cache效率越高。

2.6 Cache的两个重要等式

命中率与加速比的关系

r=tmtc+(1h)tmr = \frac{t_m}{t_c + (1-h) \cdot t_m}

达到目标加速比所需的命中率

h=1tm/rtctmh = 1 - \frac{t_m/r - t_c}{t_m}

2.7 多级Cache

现代计算机通常采用多级Cache:

  • L1 Cache:在CPU内部,分为指令Cache(L1-I)和数据Cache(L1-D),速度最快,容量最小(32KB~64KB)
  • L2 Cache:在CPU内部或紧邻CPU,容量较大(256KB~1MB)
  • L3 Cache:多核共享,容量最大(几MB~几十MB)

多级Cache的平均访问时间(以两级为例):

ta=h1tc1+(1h1)h2tc2+(1h1)(1h2)tmt_a = h_1 \cdot t_{c1} + (1-h_1) \cdot h_2 \cdot t_{c2} + (1-h_1)(1-h_2) \cdot t_m

其中 h1h_1h2h_2 分别为L1、L2的局部命中率tc1t_{c1}tc2t_{c2} 分别为L1、L2的访问时间。


三、记忆与理解辅助

3.1 口诀记忆

口诀:"先查Cache命中快,未中再把主存搬,命中率高性能好,局部性是关键"

口诀:"串行公式 tc+(1h)tmt_c+(1-h)t_m,并行公式 htc+(1h)tmht_c+(1-h)t_m"

  • 串行(先Cache后主存):ta=tc+(1h)tmt_a = t_c + (1-h) \cdot t_m
  • 并行(同时访问):ta=htc+(1h)tmt_a = h \cdot t_c + (1-h) \cdot t_m

3.2 对比表:两种平均访问时间公式

模型公式含义
串行模型ta=tc+(1h)tmt_a = t_c + (1-h) \cdot t_m先查Cache,未命中再查主存。命中时总时间=tct_c,未命中时总时间=tc+tmt_c+t_m
并行/简化模型ta=htc+(1h)tmt_a = h \cdot t_c + (1-h) \cdot t_mCache和主存同时被查询(或简化为命中取Cache时间,未命中取主存时间)

3.3 命中率提升直觉

  • Cache容量翻倍,命中率提升幅度逐渐减小(边际递减效应)
  • 实际系统中,32KB L1 Cache的命中率约85%~95%,加上L2可达99%以上
  • 命中率从90%提升到99%比从50%提升到90%更有价值(因为未命中率从10%降到1%,性能提升巨大)

四、例题与精解

例题1(基础)

题目:某计算机的Cache访问时间为10ns,主存访问时间为200ns,Cache命中率为90%。采用"先访问Cache,未命中再访问主存"的方式。求: (1)平均访问时间; (2)访问效率; (3)加速比。

命题意图:考查Cache-主存系统的基本性能计算。

审题分析tc=10nst_c=10\text{ns}tm=200nst_m=200\text{ns}h=0.9h=0.9,串行模型。

解题思路:使用串行模型公式。

完整步骤

(1)平均访问时间:

ta=tc+(1h)tm=10+(10.9)×200=10+0.1×200=10+20=30nst_a = t_c + (1-h) \cdot t_m = 10 + (1-0.9) \times 200 = 10 + 0.1 \times 200 = 10 + 20 = 30\text{ns}

(2)访问效率:

e=tcta=1030=33.3%e = \frac{t_c}{t_a} = \frac{10}{30} = 33.3\%

(3)加速比:

r=tmta=20030=6.67r = \frac{t_m}{t_a} = \frac{200}{30} = 6.67

即使用Cache后,平均访问速度是只用主存的6.67倍。

方法反思:注意串行和并行模型的区别。本题明确说"先访问Cache,未命中再访问主存",所以用串行模型。


例题2(中等)

题目:某计算机系统采用两级Cache。L1 Cache的命中率为95%,访问时间为2ns;L2 Cache的局部命中率为80%,访问时间为10ns;主存访问时间为100ns。 (1)求该系统的平均访问时间; (2)如果去掉L2 Cache,要达到相同的平均访问时间,L1 Cache的命中率需要提高到多少?

命题意图:考查多级Cache的平均访问时间计算及命中率分析。

审题分析:两级Cache,h1=0.95h_1=0.95tc1=2nst_{c1}=2\text{ns}h2=0.80h_2=0.80(L2局部命中率),tc2=10nst_{c2}=10\text{ns}tm=100nst_m=100\text{ns}

解题思路:使用多级Cache公式。

完整步骤

(1)平均访问时间:

ta=h1tc1+(1h1)h2tc2+(1h1)(1h2)tmt_a = h_1 \cdot t_{c1} + (1-h_1) \cdot h_2 \cdot t_{c2} + (1-h_1)(1-h_2) \cdot t_m

ta=0.95×2+0.05×0.80×10+0.05×0.20×100t_a = 0.95 \times 2 + 0.05 \times 0.80 \times 10 + 0.05 \times 0.20 \times 100

ta=1.9+0.4+1.0=3.3nst_a = 1.9 + 0.4 + 1.0 = 3.3\text{ns}

(2)去掉L2后的等效命中率:

只用一级Cache时,ta=tc1+(1h1)tmt_a = t_{c1} + (1-h_1') \cdot t_m

ta=3.3nst_a = 3.3\text{ns}

3.3=2+(1h1)×1003.3 = 2 + (1-h_1') \times 100

1.3=(1h1)×1001.3 = (1-h_1') \times 100

1h1=0.0131-h_1' = 0.013

h1=0.987=98.7h_1' = 0.987 = 98.7\\%

即L1 Cache的命中率需要从95%提高到98.7%,增加了3.7个百分点。这说明L2 Cache的存在使得对L1命中率的要求大幅降低。

方法反思

  1. 多级Cache中,h2h_2 是L2的局部命中率(在L1未命中的情况下,L2命中的概率),不是全局命中率。
  2. L2 Cache的全局命中率 = (1h1)×h2=0.05×0.80=4%(1-h_1) \times h_2 = 0.05 \times 0.80 = 4\%
  3. 多级Cache的效果:虽然L2命中率只有80%(看起来不高),但因为只有5%的请求会到达L2,所以L2的存在大幅降低了访问主存的概率。

五、考情分析

项目内容
近5年考查频次≥5次
常见题型选择题(Cache基本概念)、计算题(命中率、平均访问时间、加速比)
分值占比选择题2分,计算题5–8分
命题趋势Cache命中率计算是每年必考题型。近年趋势是将命中率计算与映射方式、替换算法结合出综合大题,或与多级Cache结合出计算题

六、易错点提醒

易错点1

  • 错误表现:串行模型下计算平均访问时间时,未命中时只用 tmt_m 而忘记加上 tct_c
  • 错误原因:串行模型下,即使未命中也要先查Cache(花费 tct_c),再查主存(花费 tmt_m
  • 正确做法:串行模型:ta=tc+(1h)tmt_a = t_c + (1-h) \cdot t_m。未命中时总时间 = tc+tmt_c + t_m

易错点2

  • 错误表现:多级Cache中,将L2的局部命中率误当作全局命中率
  • 错误原因:混淆"局部命中率"和"全局命中率"的概念
  • 正确做法:局部命中率 = 本级命中次数 ÷ 到达本级的访问次数。全局命中率 = 本级命中次数 ÷ 总访问次数。h2h_2(局部)× (1h1)(1-h_1) = L2的全局命中率

易错点3

  • 错误表现:认为提高Cache命中率只需增大Cache容量
  • 错误原因:忽略其他因素(行大小、映射方式、替换算法、程序局部性)
  • 正确做法:命中率受多个因素影响。容量只是其中之一,且存在边际递减效应。考试中需综合考虑

易错点4

  • 错误表现:计算访问效率时,分子分母颠倒
  • 错误原因:对"效率"的定义不清
  • 正确做法:访问效率 e=tc/tae = t_c / t_a,表示Cache访问时间占平均访问时间的比例。ee 越接近1越好,说明大部分时间花在快速的Cache上

七、来源标注

  • 依据2026考研统考大纲(408-计算机组成原理-第三章"存储器层次结构")
  • 依据大学本科经典教材共识:唐朔飞《计算机组成原理》、白中英《计算机组成原理》、Patterson & Hennessy《计算机组成与设计》

考研全科复习资料 - 基于2026考研统考大纲