CPU的局部性指的是程序访问内存时,倾向于以一定的模式访问内存地址,这种模式可以分为以下几种局部性:
-
时间局部性(Temporal Locality):访问某个内存位置的数据后,很可能在近期再次访问相同的内存位置。例如,循环结构中的重复访问、函数调用时的局部变量等。时间局部性可以通过缓存(Cache)的使用来加以利用。
-
空间局部性(Spatial Locality):访问某个内存位置的数据后,很可能在近期访问相邻的内存位置。例如,数组的连续访问、顺序遍历数据结构等。空间局部性可以通过预取(Prefetching)和缓存行填充(Cache Line Fill)等技术来加以利用。
-
分支局部性(Branch Locality):分支语句(如if、switch)中的条件跳转会导致程序执行路径的改变。分支局部性指的是在一段时间内,程序更倾向于选择某个特定的分支路径。分支预测(Branch Prediction)和分支目标缓冲器(Branch Target Buffer)等机制可以提高分支局部性的处理效率。
-
数据局部性(Data Locality):指在一段时间内,程序更倾向于访问某个特定集合的数据。数据局部性包括以下两种情况:
- 空间数据局部性(Spatial Data Locality):程序更倾向于访问在内存中彼此相邻的数据,如数组的连续访问。
- 时间数据局部性(Temporal Data Locality):程序更倾向于在一段时间内重复访问相同的数据,如循环结构中的重复访问。
这些局部性特征都是现代计算机设计和优化的重要考虑因素。通过充分利用局部性,可以提高程序的性能和效率,减少访问内存的开销,加快计算速度。