三种cache映射方式简单讲解

时间:2024-04-07 21:06:39

前言

关于cache【cache高速缓存 简单讲解与验证

上次讲到cache的基本原理,并且做了一个简单的实验来验证cache对存取效率的提升,今天来复习一下三种cache的存取方式

通过一定的方式将cache映射到内存,这可以看作是硬件的“哈希”,今天主要介绍三种映射方式,分析其原理,以及miss率等等

直接映射

直接映射简单粗暴,每一个内存块都对应到一个cache行,而且映射的方式也很粗暴。下面通过一张图片了解一下
三种cache映射方式简单讲解
假设有4个cache行,每行16字节,那么主存中

0-15字节被映射到cache行1
16-31字节被映射到cache行2
32-47字节被映射到cache行3
48-63字节被映射到cache行4

64-79字节被映射到cache行1 这里循环往复,以4个16字节为循环长度,上图中不同颜色的连线表示了这种循环映射

我们对内存中的地址,直接模除64(4*16=64),看结果,如果模除结果是在0-15,那么cache行1,请!,其他的同理

示例
假设每次访问的都是映射到同一行的内存块,那么会不断的miss,因为就一块cache,大家一起用,互相覆盖,造成miss率高
三种cache映射方式简单讲解

优点是电路搭建简单,成本低。缺点是miss率很高

全连接映射

全连接映射顾名思义,谁都能映射。任意内存块,可以被映射到任意cache行。可以将cache看作一个list,只要list未满,就载入最前的一个空cache行,直到cache满,然后淘汰掉旧行,载入新行。
三种cache映射方式简单讲解

示例:
三种cache映射方式简单讲解

全连接映射hit率很高,因为大家公用所有cache,而不是像直接映射一样大家共用一个cache行。缺点是硬件实现很复杂,成本非常高(有n个cache行,就要有n个地址的比较电路来判断地址是否在行内)

组映射

组映射将cache分组,一个cache组包含多个cache行,而内存块以直接映射的形式,先映射到对应的组上,然后再以全连接映射的方式,再组内寻找对应到的cache行。

三种cache映射方式简单讲解

示例:
如下示例中,两次访问映射到同一cache组的地址,如果是直接映射,那么会被覆盖,而组内采用全连接映射,则避免了覆盖的情况。
三种cache映射方式简单讲解

优缺点:综合了上述两种映射,暨能做到组间直接映射,又能做到组内全连接映射,在成本和效率上有所折中,是折中的平衡方案。