第六章《存储器层次结构》
2018-12-02 本文已影响0人
ShawnIsACoder
局部性
具有良好局部性
的程序倾向于一次又一次地访问相同的数据项集合,或是倾向于访问邻近的数据项集合。具有良好局部性
的程序比局部性差的程序更多的倾向于从存储器层级结构
的高层次处访问数据项,因此运行得更快
局部性
有两种形式:
-
时间局部性:在一个具有良好
时间局部性
的程序中,被引用过一次的内存位置很可能在不远的将来再被多次引用 -
空间局部性:在一个具有良好
空间局部性
的程序中,如果一个内存的位置被引用了一次,那么程序很可能在不远的将来引用附近的一个内存位置
量化评价程序中局部性的一些原则:
- 重复引用相同变量的程序具有良好的时间局部性
- 对于具有步长
k
的引用模式程序,步长越小,空间局部性越好。在内存中以大步长跳来跳去的程序空间局部性很差 - 对于取指令来说,循环具有良好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好
存储器层级结构
存储器层级结构.png从高层往底层走,存储设备变得更慢、更便宜和更大
存储器层级结构
的核心思想是:对于每个k
,位于k
层的更快更小的存储设备作为位于k+1
层的更大更慢的存储设备的缓存
。换句话说,层级结构中的每一层都缓存来自较低一层的数据对象。
对于缓存
而言,有几个重要的感念:
-
缓存命中:当程序需要第
k+1
层的某个数据对象d
时,它首先会在第k
层的一个块中查找d
。如果d
刚好缓存在第k
层中,那么就是我们所说的缓存命中
-
缓存不命中:如果
k
层中没有缓存数据对象d
,就表示缓存不命中
发生
缓存不命中
之后,k
层会从k+1
层中读取出包含数据d
的块。如果此时k
层已经满了,就会根据替换策略
来替换
或是驱逐
某个块。被替换
或驱逐
的块也被称为是牺牲块