《计算机体系结构 量化研究方法》P527 附录B.3
存储器平均访问时间
很自然的,如果我们希望降低存储器平均访问时间的话,可以从以下三个方面入手
类别1.降低缺失率
1.0 缺失的分类
□ 强制(Compulsory)缺失:
在第一次访问某个块时,它不可能在缓存中,所以必须将 其读到缓存中。这种缺失也被称为冷启动缺失或首次访问缺失。
□ 容量(Capacity)缺失:
如果缓存无法容纳程序执行期间所需要的全部块,则由于一 些块会被丢弃,过后再另行提取,所以会(在强制缺失之外)发生容量缺失。
□ 冲突(Conflict)缺失:
如果块的放置策略为组相联或直接映射,则会(在强制缺失和 容量缺失之外)发生冲突缺失,这是因为如果有太多块被映射到同一个组中,则这个组 中的某个块可能会被丢弃,过后再另行提取。这种缺失也被称为碰撞缺失。其要点就是:由于对某些常用组的请求数超过〃,所以本来在全相联缓存中命中的情景会在〃路 组相联缓存中变为缺失
□ 一致性缺失:这里先不考虑
1.1 增大缓存块
优:
- 使用较大的块可以减少强制缺失
- 较大的块意味着需要较少的 标签,所以它们可以略微降低静态功耗
劣:
- 增加了缺失代价,需要读入的块大小较大
- 增加容量缺失(容易使得缓存变满)或冲突缺失(组数变少,需要频繁替换),特别是当缓 存整体容量较小时。
折中
缓存设计者都在尝试尽可能同时降低缺失率和缺失代价。块大小的选 择有赖于低级存储器的延迟和带宽。高延迟和高带宽需要采用大块,因为缓存在每次缺失时能 够获取的字节可以多出许多,而缺失代价却增加得很少。相反,低延迟和低带宽则需要采用小块,因为这种情况下采用较大块不会节省多少时间。例如,一个小块的两倍的缺失代价才可能 接近比该块大两倍的块的缺失代价。更多的小块还可能减少冲突缺失。
1.2 增大缓存
这一技术在片外缓存中尤其常用。
增加缓存的容量,可以减少容量冲突,但是其明显的缺点是可能延长命中时间,增加成本和功耗。
1.3 提高相联度
经验规律:
第一条规律是:对于这些特定大小的缓存,从实际降低缺失数的功效来说,八路组相联与全相联一样有效。
第二条规律是:2 : 1缓存经验规律:大小为N的直接映射缓存与大小为N/2的两路组相 联缓存具有大体相同的缺失率。
类别2. 降低缺失代价
2.1 采用多级缓存
背景:技术发展趋势使处理器的速度 增长快于DRAM,从而使缺失代价的相对成本随时间的推移而升高。
概念:在原缓存与存储器之间再添加一级缓存。第一级缓存可以小到足以与快速处理器的时钟周期时间相匹配(快)。而第二级缓存则可以大到足以 捕获许多本来可能进入主存储器的访问,从而降低实际缺失代价。(大)
二级缓存的存储器平均访问时间
L1/L2 分别为1、2级缓存的局部缺失率
上一级(i-1)的确实代价L_i-1是下一级的(i)的存储器访问时间(T_i)
局部缺失/全局缺失
在这个公式中,第二级缺失率是针对第一级缓存未能找到的内容进行测量的。为了避免歧义, 针对二级缓存系统采用以下术语。
局部缺失率一一缓存中的缺失数除以对该缓存进行的存储器访问总数。可以想到,对 于第一级缓存,它等于缺失率L1;对于第二级缓存,它等于缺失率L2。
全局缺失率—--- 缓存中的缺失数除以处理器产生的存储器访问总数。利用以上术语,第 一级缓存的全局缺失率仍然为缺失率L1,对于第二级缓存则为缺失率L1 X 缺失率L2 (全局上来看,一级缓存的缺失率更大,因为可能存在L1种缺失了但是在L2中找到)
全局缺失率是一个更有用的度量标准:它指出在处理器发出的存储器访问中,有多大比例指向了内存。
2.2 使读缺失的优先级高于写缺失
写缓冲区是实现这一优化的理想之选。因为读缺失请求有可能命中写缓冲区正在写入最新值的位置,会产生存储器上的写后读风险。一种解决方法是在读缺失时先检查写缓冲区的内容。如果没有冲突,且存储器可用,则在写操作之前发送读取请求,会降低缺失代价。
类别3.缩短命中时间
3.1 避免在索引缓存期间进行地址变换
一种常用优化方法是使用页内偏移地址(虚拟地址和物理地址中相同的部分)来索引缓存。这种虚拟地址索引/物理地址标签方法增加了系统复杂度以及对L1缓存大小与结构的限制,但从关键路径中消除了变换旁路缓冲区访问这一收益大于损失。