存储器层次结构
局部性
具有良好局部性的程序倾向于一次又一次地访问相同的数据项集合,或是倾向于访问邻近的数据项集合。具有良好局部性的程序比局部性差的程序更多的倾向于从存储器层级结构的高层次处访问数据项,因此运行得更快
局部性有两种形式:
- 时间局部性:在一个具有良好时间局部性的程序中,被引用过一次的内存位置很可能在不远的将来再被多次引用;
- 空间局部性:在一个具有良好空间局部性的程序中,如果一个内存的位置被引用了一次,那么程序很可能在不远的将来引用附近的一个内存位置;
量化评价程序中局部性的一些原则:
- 重复引用相同变量的程序具有良好的时间局部性;
- 对于具有步长k的引用模式程序,步长越小,空间局部性越好。在内存中以大步长跳来跳去的程序空间局部性很差;
- 对于取指令来说,循环具有良好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好;
高速缓存对程序性能的影响
程序访问存储位置的实际速率不是一个数字能描述的, 相反, 他是一个变化很大的程序局部性函数(我们称之为存储器山),变化可以有几个数量级。