📜  高速缓存中的引用和高速缓存操作的局部性

📅  最后修改于: 2021-09-27 06:23:45             🧑  作者: Mango

引用局部性是指计算机程序倾向于在特定时间段内访问同一组内存位置的现象。换句话说,局部性是指计算机程序访问地址彼此接近的指令的趋势。引用局部性的特性主要体现在程序中的循环和子程序调用上。

  1. 在程序控制处理单元中出现循环的情况下,重复指的是构成循环的指令集。
  2. 在子程序调用的情况下,每次从内存中获取指令集。
  3. 对数据项的引用也被本地化,这意味着一次又一次地引用相同的数据项。

在上图中,可以看到 CPU 想要读取或获取数据或指令。首先,它将访问靠近缓存的高速缓存,并提供非常快速的访问。如果找到所需的数据或指令,则将其取出。这种情况称为缓存命中。但是,如果在高速缓存中找不到所需的数据或指令,则这种情况称为高速缓存未命中。现在将在主内存中搜索所需的数据或正在搜索的指令,如果找到,将通过以下两种方式之一:

  1. 第一种方法是 CPU 应该获取所需的数据或指令并使用它,仅此而已,但是当再次需要相同的数据或指令时,CPU 再次必须访问相同的主内存位置,我们已经知道 main内存是访问最慢的。
  2. 第二种方法是将数据或指令存储在高速缓冲存储器中,以便在不久的将来再次需要时可以以更快的方式获取。

缓存操作:
它基于参考局部性原则。有两种方法可以从主存储器中获取数据或指令并将其存储在高速缓存中。这两种方式如下:

  1. 时域——
    时间局部性意味着可能很快就需要正在获取的当前数据或指令。所以我们应该把那个数据或指令存储在缓存中,这样我们就可以避免在主存中再次搜索相同的数据。

    当 CPU 访问当前的主内存位置以读取所需的数据或指令时,它也会存储在高速缓存中,这是基于在不久的将来可能需要相同的数据或指令的事实。这被称为时间局部性。如果某些数据被引用,那么它很有可能在不久的将来再次被引用。

  2. 空间局部性——
    空间局部性意味着接近当前正在获取的内存位置的指令或数据,可能在不久的将来很快就会需要。这与时间局部性略有不同。在这里,我们谈论的是接近定位的内存位置,而在时间局部性中,我们谈论的是正在获取的实际内存位置。

缓存性能:
缓存的性能是根据命中率来衡量的。当 CPU 引用内存并在高速缓存内存中查找数据或指令时,称为高速缓存命中。如果在高速缓存中找不到所需的数据或指令,而 CPU 参考主存储器来查找该数据或指令,则称为高速缓存未命中。

Hit + Miss  = Total CPU Reference
Hit Ratio(h) = Hit / (Hit+Miss) 

任何内存系统的平均访问时间都包含两个级别:缓存和主内存。如果Tc是访问缓存的时间,Tm是访问主内存的时间,那么我们可以写:

Tavg = Average time to access memory
Tavg = h * Tc + (1-h)*(Tm + Tc)