第六章:存储器层次结构

具有良好局部性的程序倾向于一次又一次的访问相同的数据项集合


存储的CPU寄存器的数据,只要0个周期就能访问,存储在高速缓存的数据,需要4-75个周期,存储在磁盘上的数据,则大约需要几千万个周期

只有了解系统是如何将数据在存储器层次结构中上下移动的,才可以编写自己的程序,使得程序的数据项存储在层次结构中较高的地方

了解如何看一眼源代码就能获得对程序局部性的高层次的认识,是程序员要掌握的一项重要和有用的技能

存储设备

局部性

局部性通常有两种形式:空间局部性时间局部性。空间局部性好的代码倾向于在下次引用附近的内存位置,时间局部性好的代码倾向于引用相同的内存代码

从硬件到操作系统,再到应用程序,它们的设计都用到了局部性原理

  • 硬件层:局部性原理允许计算机设计者引入高速缓存存储器来保存最近使用的指令和数据。从而提高对主存的访问速度
  • 操作系统层:允许系统使用主存作为虚拟地址空间最近被引用块的高速缓存
  • 应用程序层:如Web浏览器把最近引用的文档放在本地磁盘上,利用的就是时间局部性

对于顺序访问数组元素的函数,具有步长为1的顺序引用模式具有较好的空间局部性,且随着步长的增加,空间局部性下降。而对于多维数组,如果是普通的行优先顺序访问数组元素,也具有良好的空间局部性,因为是步长为1的引用模式;如果是按照列顺序访问数组,就会得到步长为N的引用模式,空间局部性下降

对于取指令,循环有好的时间和空间局部性,循环体越小,迭代次数越多,局部性越好??

高速缓存