3.6 高速缓冲存储器
由于程序的转移概率不会很低,数据分布的离散性较大,所以单纯依靠并行主存系统提高主存系统的频宽是有限的,这就需要从系统结构上进行改进,即采用存储体系,通常将存储系统分为"Cache-主存"层次和"主存-辅存"层次
3.6.1 程序访问的局部性原理
程序访问的局部性原理包括时间局部性和空间局部性.时间局部性是指在最近的未来要用到的信息,很可能是现在正在使用的信息,因为程序中存在循环.空间局部性是指在最近的未来要用到的信息,很可能与现在正在使用的信息在存储空间上是邻近的,因为指令通常是顺序存放,顺序执行的,数据一般也是以向量,数组等形式簇聚地存储在一起的.
高速缓冲技术就是利用程序访问的局部性原理,把程序中正在使用的部分存放在一个高速的,容量较小的Cache中,使CPU的访存操作大多数对Cache进行,从而大大提高程序的执行速度
例3.2 假定数组元素按行优先方式存储,对于下面的两个函数
- 对于数组a的访问,那个空间局部性更好?哪个时间局部性更好?
2)对于指令访问来说,for循环体的空间局部性和时间局部性如何?
解:
假定M,N都为2048,按字节编址,每个数组元素占4个字节,则指令和数据在主存的存放情况如图3.16
-
对于数组a,程序A和程序B的空间局部性相差较大. 程序A对数组a的访问顺序为 a [ 0 ] [ 0 ] , a [ 0 ] [ 1 ] , ⋯ , a [ 0 ] [ 2047 ] \mathrm{a}[0][0], \mathrm{a}[0][1], \cdots, \mathrm{a}[0][2047] a[0][0],a[0][1],⋯,a[0][2047]; a [ 1 ] [ 0 ] , a [ 1 ] [ 1 ]