cache 设置在CPU 和主存之间, 可以提高CPU访问指令和数据的速度。
一 cache 的基本工作原理
cache 是一种小容量高速缓冲存储器, 由快速的 SRAM(组成随机存取存储器)组成, 直接制作在 CPU芯片内。
为便于cache 和主存间交换信息, cache和主存空间都被划分为相等的区域。 主存中的区域称为块, 也称为主存块, 它是cache 和主存之间的信息交换单位。
cache 中存放一个主存块的区域称为cache 行(line)或 槽(slot)。
下图给出带cache 的CPU执行一次访存操作的过程。
在访存过程中, 需要判断所访问信息是否在cache中。 若CPU访问单元所在的块在cache中, 则称cache命中(Hit), 命中的概率称为命中率(Hit Rate)p, 它等于命中次数与访问总次数之比; 若不在cache中, 则为不命中或缺失, 其概率称为缺失率, 它等于不命中次数与访问总次数之比。
命中时,CPU 在cache 中直接存取信息, 所用的时间开销就是cache访问时间Tc, 称为命中时间;
缺失时,需要从主存读取一个主存块送到 cache, 并同时将所需信息送CPU, 因此,所用时间开销为主存访问时间Tm 和cache 访问时间Tc 之和。 通常把从主存读入一个主存块到cache
的时间Tm 称为缺失损失。
CPU 在cache —主存层次 的平均访问时间为
由于程序访问的局部性特点, cache的命中率可以达到很高, 接近于1。 因此,虽然缺失损失 > > 命中时间。
看一个例子
假定处理时钟周期为2 ns, 某程序由 1000 条指令组成, 每条指令执行一次, 其中的4条指令在取指令时, 没有在cache 中找到, 其余指令都能在cache 中取到。 在执行指令过程中, 该程序需要 3000 次主存数据访问, 其中, 6次没有在 cache 中找到。 试问:
(1)执行该程序得到的cache 命 中率是多少?
(2)若cache 中存取一个信息的时间为1个时钟周期, 缺失损失为10个时钟周期,则 CPU 在cache ——主存层次的平均访问时间为多少?
解: (1) 总访问次数为 1000 + 3000 = 4000, 未命中次数为 10,故cache 命中率为(4000-10)/4000 = 99.75%。
(2)cache—主存层次的平均访问时间为 1+(1-99.75%)* 10 =1.025 个时钟周期。即 1.025 * 2 ns = 2.05 ns。 与cache 的访问时间相近。