缓存是一种存储器,它可以加快计算机的运行速度。缓存优化的目标是让缓存更快、更有效地工作。
有五个指标来衡量缓存优化的效果:命中时间、失效率、失效代价、缓存带宽和功耗。
命中时间是指从缓存中读取数据所需的时间,
失效率是指缓存中没有需要的数据的概率,
失效代价是指从其他存储器中获取数据所需的时间,
缓存带宽是指缓存每秒能处理的数据量,
功耗是指缓存消耗的电能。
根据这五个指标,将十种高级的缓存优化方法分为五类:
- 减少命中时间:命中时间是指从缓存中读取数据所需的时间,它取决于缓存的大小、关联度、端口数等因素。有两种减少命中时间的方法:小而简单的一级缓存和路预测。小而简单的一级缓存可以减少访问延迟和功耗,但可能会增加失效率。路预测是一种预测缓存中哪一路(组)包含需要的数据的技术,它可以减少多路选择器的开销,提高访问速度。
- 增加缓存带宽:缓存带宽是指缓存每秒能处理的数据量,它取决于缓存的结构和访问模式。有三种增加缓存带宽的方法:流水线缓存、多银行缓存和非阻塞缓存。流水线缓存是指将缓存访问分成多个阶段,每个阶段用一个时钟周期完成,这样可以提高缓存的吞吐量。多银行缓存是指将缓存分成多个独立的部分,每个部分可以同时被访问,这样可以支持多个并发请求。非阻塞缓存是指当缓存发生失效时,不会阻止后续的请求,而是继续处理它们,这样可以隐藏失效代价。
- 减少失效代价:失效代价是指从其他存储器中获取数据所需的时间,它取决于下一级缓存或内存的速度和距离。有两种减少失效代价的方法:优先传送关键字和合并写缓冲区。优先传送关键字是指当从下一级缓存或内存读取一个块时,先传送处理器需要的那个字(word),这样可以让处理器尽快继续执行。合并写缓冲区是指将多个对同一个块的写操作合并成一个操作,这样可以减少写回下一级缓存或内存的次数。
- 减少失效率:失效率是指缓存中没有需要的数据的概率,它取决于缓存的大小、关联度、替换策略、块大小等因素。有一种减少失效率的方法:编译器优化。编译器优化是指在编译时对程序进行分析和变换,以改善程序对缓存的利用率。例如,编译器可以调整数据结构的布局、循环的顺序、数组的引用方式等,以减少冲突失效和容量失效。
- 通过并行性减少失效代价或失效率:并行性是指同时执行多个操作或任务,以提高系统性能。有两种通过并行性减少失效代价或失效率的方法:硬件预取和编译器预取。硬件预取是指在处理器发出请求之前,由硬件自动地将可能需要的数据从下一级缓存或内存提前读取到当前级别的缓存中,这样可以降低失效代价或失效率。编译器预取是指在编译时在程序中插入额外的指令,用来将可能需要的数据从下一级缓存或内存提前读取到当前级别的缓存中,这样也可以降低失效代价或失效率。