1. 高速缓存的概念
-
根据程序运行存取的局部性原理,于是提出了高速缓存(Cache)的概念,Cache是一种更小、速度更快的存储设备。作为更大、更慢存储设备的缓存区。
-
存储器层次结构的基本思想:对于每个k,位于第k层的更快更小的存储设备作为位于k+1层的更大更慢存储设备的缓存。根据局部性原理,程序访问第k层的数据比访问第k+1层的数据要频繁。
-
第k+1层更大、更慢、更便宜的设备被划分成块,数据以块为传输单位在层与层间进行传输复制,第k层存储第k+1层数据块的子集。
2. 缓存不命中
- 冷(强制性)不命中:当缓存为空时,对任何数据的请求都不命中。
- 冲突不命中:大多数缓存将第k+1层的某个块限制放置在第k层块的一个小的子集中(不停交叉替换,导致不命中),冲突不命中发生在缓存足够大,但是这些多个数据对象会映射到同一个缓存块。
- 容量不命中:发生在活跃块集合的大小比缓存大。
3. 高速缓存通用组织
包含组,块,字节。
寻址方式:
首先定位其所在的组,然后比较tag是否存在,若存在的话定位到块偏移的位置。
4. 高速缓存实例
- 直接映射高速缓存(E=1):每一组只有一行。
- 组相联高速缓存(E=2):每组两行。
- 全相联映射缓存:每行都比较tag。
5. 编写高速缓存友好的代码
- 让通用或共享的功能或函数–最常见情况运行的快(专注在核心函数和内循环上)
- 尽量减少每个循环内部的缓存不命中数量(反复引用变量;步长为1的参考模式)
6. 存储器山
- 读吞吐量(读带宽):每秒从存储系统中读取的字节数(MB/s)
- 存储器山:测量读取吞吐量作为空间和时间局部性的函数(紧凑方式去描述存储系统性能)