引用局部性

CPU 的性能往往受限于相对较慢的主内存访问速度。缓存(Cache Memory)通过存储经常使用的数据和指令来提升速度。它的效率依赖于“引用局部性”原则。

  • 引用局部性 意味着程序往往倾向于重复使用相同的数据或相邻的指令,而不是随机访问内存位置。
  • 它帮助缓存预测下一步需要哪些信息。
  • 这减少了平均内存访问时间,从而提高了 CPU 的整体效率。
  • 这一概念是缓存设计和运行的基础。
  • 表现出强局部性的程序能更有效地利用缓存,从而获得更高的命中率并减少缓存缺失。

!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20251029123113195462/mainmemory.webp">mainmemoryCache Memory

形式化定义

引用局部性是程序的一种属性,描述了在执行过程中内存引用如何在时间和空间上聚集在一起。

主要有两种类型的引用局部性:

时间局部性

时间局部性指出,如果在某个时刻访问了特定的内存位置(数据或指令),那么在不久的将来很可能再次访问它。

  • 程序通常包含循环、计数器和经常使用的变量。
  • 由于这些在短时间内被重复使用,将它们存储在缓存中可以确保更快的访问。

!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20251029124100882879/currentdatastored.webp">currentdatastoredTemporal Caching

> 示例:

>

>

> for (int i = 0; i  

>

> – 变量 INLINECODEb2a96676、INLINECODE8e8f0da3 和数组 a[i] 的元素被重复访问。

> – 将这些存储在缓存中有助于避免多次访问主内存。

基于时间局部性的缓存操作:

当 CPU 从主内存获取一个数据项时,它也会在缓存中保留一个副本,假定很快就会用到它。如果这个假设是正确的,随后的访问就会导致缓存命中。

空间局部性

空间局部性指出,如果访问了特定的内存位置,那么附近的内存位置也很可能很快被访问。指令和数据存储在连续的内存位置中。

  • 当程序访问一个位置时,接下来的几条指令或数据项通常位于它旁边。

> 示例:

>

>

> for (int i = 0; i  

>

> – 这里,数组 arr[i] 的连续元素被访问。

> – 一旦获取了 INLINECODEc0424cc4,CPU 很可能会访问存储在附近内存位置的 INLINECODE7e5e0292、arr[2] 等。

基于空间局部性的缓存操作:

缓存利用块获取技术。当访问一个块中的一个字时,整个块(包含附近地址)会被加载到缓存中,以预判未来的访问。

平均内存访问时间 (AMAT) 的数学表示

我们通常使用 平均内存访问时间 来评估缓存系统的性能。它代表了 CPU 访问数据或指令所需的平均时间,同时考虑了缓存命中和缓存缺失的情况。

设:

  • Tc = 访问缓存的时间
  • Tm = 访问主内存的时间
  • h = 缓存命中率(在缓存中找到所需数据的概率)

那么,平均内存访问时间可以表示为:

> Average Memory Access Time (AMAT)= h × Tc + (1−h) × Tm

这里,

  • 项 (h × Tc) 代表缓存命中贡献的时间。
  • 项 (1 − h) × Tm 代表缓存缺失贡献的时间,此时必须从主内存获取数据。

更高的命中率(h)表示更好的缓存利用率和更强的引用局部性,从而带来更低的 AMAT 和提升的整体系统性能。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/32489.html
点赞
0.00 平均评分 (0% 分数) - 0