局部性原理

概念

局部性原理(Principle of Locality)是指程序倾向于重复访问最近使用过的数据(或指令)以及附近的数据。这是高速缓存能够有效工作的基础。

时间局部性(Temporal Locality)

  • 最近被访问过的数据/指令在不久的将来很可能再次被访问
  • 示例:循环中的循环变量、累加器
  • 利用:将数据保留在缓存中

空间局部性(Spatial Locality)

  • 被访问过的数据附近的数据很可能在不久的将来被访问
  • 示例:数组的顺序访问、指令的顺序执行
  • 利用:一次加载一个缓存块(多个相邻数据)

步长与局部性

  • 步长为 1 的遍历具有良好的空间局部性
  • 步长大则空间局部性差
  • 多维数组的遍历顺序至关重要
// 良好的空间局部性(步长=1)
for (int i = 0; i < n; i++)
    sum += a[i];
 
// 差的空间局部性(大步长)
for (int i = 0; i < n; i++)
    sum += a[i * 100];

局部性是缓存工作的基础

正是利用了局部性原理,将最近使用的数据块加载到缓存中。


相关笔记:

链接到