带你彻底搞懂cache
fool哥
编辑于 2025年03月13日 00:49

彻底

00:40

访问顺序与存放顺序保持一致的话,代表空间局部性好。

01:42

两个程序的时间局部性都很差,因为每个数组元素都只被访问了一次。

04:23

SRAM是非破坏性的读出

05:36 cache和主存的映射方式

为什么要映射

cache的位数比主存的地址位数要小

块内地址,第几个字

首先定位在哪个块,然后定位在块内的第几个字。

这就相当于分页管理,指令相对于页面,找它在哪个页面里面,然后还有一个页内偏移量,看它在页面的第几条指令。

07:45

主存和cache的块内地址位宽相同。

2^m >> 2^c

下面考虑如何映射

08:27 直接映射

块冲突的概率很高而且空间利用率很低

09:24 全相连的地址计算

若cache共有2^c行,那么主存块号的低c位即为对应的cache行号

cache

主存块号的低c位,就是cache行号

m-c位是干啥的?

令m-c=t,作为标记位

看cache来自于主存的哪一块

10:33

取的是主存中地址的前t位

开始举例子

前面的t位和

只要cache标记位和访存的标记位一样,且cache的valid为1,则说明cache中的这一行就是来自于我们要访问的主存地址

11:47 很重要,CPU访存方式

cache的地址容易推出是14位

14:42

把主存地址转换为2进制,就可以算出cache行号

全相连映射

14:53 全相连映射

允许主存中每个字块映射到cache块中的任何一个位置。

相比直接映射,就不需要去算映射到哪个位置了。不用去计算cache行号。

主存块号就等于标记

15:23 组相连映射

组间采用的是直接映射

组内采用的是全相连映射

主存块的替换算法

17:39 替换算法

FIFO没有遵循局部性原理,命中率低

19:44 cache写策略

降低了cache效率

设置了一个buffer,解决速度不匹配

buffer可能会溢出

回写法

脏位为1表示被修改,替换时要写回主存

cache写不命中

22:51 写不命中

非写分配法,只写入主存