缓存的三种映射方式

缓存的三种映射方式

缓存的三种映射方式 #

根据缓存中组数和路数的不同,我们将缓存的映射方式分为三类:

  1. 直接相连映射缓存只有一个路,一个内存块只能放置在特定的组上;
  2. 全相连映射缓存只有一个组,所有的内存块都放在这一个组的不同路上;
  3. 组组相连映射缓存同时由多个组和多个路。

对于直接相连映射,当多个内存块映射到同一组时,会产生冲突,因为只有一列,这个时候就需要将旧的缓存块换出,同时将新的缓存块放入,所以直接相连映射会导致缓存块被频繁替换。

而全相连映射可以在很大程度上避免冲突,不过,当要查询某个缓存块时,需要逐个遍历每个路,而且电路实现也比较困难。一个折中的办法就是,采用组组相连映射。这种方式与直接相连映射相比,产生冲突的可能性更小,与全相连映射相比,查询效率更高,实现也更简单。

假设缓存的组数一直是 2^n,这种形式虽然有利于查询和定位,但是如果一个程序刚好以 2^n 间隔寻址,就会导致地址更多的被映射到同一个组,而另外一些组就会被映射得很少。因此,也有些缓存的组数会设计成一个质数,这样即便程序以 2^n 间隔寻址,落到相同组的可能性会大大减小,这样一来,缓存各个组的利用率就会相对均衡。

Viewpoint #

From #

14 | CPU Cache:访存速度是如何大幅提升的?