本文翻译摘录自“ComputerArchitecture : A Quantitative Approach (6th Edition)”。
本文介绍十项优化Cache性能的高级方法,将这些方法分为如下的五类:
1. 减少命中时间——小的简单的一级Cache和路预测技术,这两项技术还可以降低功耗。
2. 增加Cache带宽——流水线Cache、多Bank Cache和非阻塞Cache,这些技术对功耗有不同的影响。
3. 减少Cache缺失代价——关键字优先、合并写缓存技术,这两项技术对功耗的影响很小。
4. 降低Cache缺失率——编译器优化技术,显然可以减少编译时间,降低功耗。
5. 通过并行技术降低缺失代价和缺失率——硬件预取、编译器预取,这些方法通常会增加功耗,主要是预取到了一些不使用的数据。
通常,上述这些优化项会增加硬件的复杂度。同时,有几个优化方法需要采用高级编译器技术,最后一个需要依赖HBM。下面对这十项优化Cache性能的高级方法进行详细介绍。
一、利用小而简单的一级Cache来降低命中时间和功耗
高速时钟频率和低功耗的限制均促使对一级Cache大小的限制,类似的,使用较低级别的相联度,也可以减少命中时间和功耗,尽管这种权衡更为复杂一些。
Cache命中过程的关键时间路径包括3个步骤:使用地址中的索引确定Tag存储器的地址;比较读取到的Tag值和地址;如果Cache为组相联,则设置多路选择器来选择正确的数据项。直接映射的Cache可以将Tag检查与数据传输重叠进行,有效减少命中时间。此外,低级别的相联度通常也将降低功耗,因为减少了必须访问的Cacheline。
尽管在新的各代微处理器中片上Cache的数量不断增加,但一级Cache大小的涨幅最近趋缓,甚至没有增长,这是因为大容量一级Cache带来的时钟频率的影响。在最近的许多处理器中,设计者通常是对相联度进行更多的优化,而不是大小。选择相联度时的另一个考虑因素是消除地址别名的可能性,对此后文有介绍。
一种可以在制造芯片前判断各项选择对命中时间和功耗影响的方法是使用CAD工具。CACTI是一个用于估算CMOS微处理器上各种Cache结构的访问时间和能耗的程序。对于一个给定的最小工艺尺寸,CACTI估算在不同Cache大小、不同相联度、不同读写端口数,等更复杂的参数条件下的Cache命中时间。下图展示了Cache大小和相联度对命中时间的影响。对于这些参数,直接映射的命中时间略快于2路组相联,2路组相联是4路组相联Cache的1.2倍,4路组相联是8路组相联Cache的1.4倍。
示例:参考上图和下表中的数据,判断一个32KB的4路组相联一级Cache访问时间是否快于32KB的2路组相联一级Cache。假设二级Cache的缺失代价是一级Cache访问时间的15倍。忽略二级Cache之外的缺失。
假设2路组相联Cache的访问时间为1,那么对于2路Cache结构:
对于4路Cache,访问时间是2路的1.4倍。缺失代价占用的时间为15 / 1.4 = 10.1,简单起见,这里假设为10。那么对于4路Cache结构:
通过以上结果可以看出,较高相联度是一种较为糟糕的权衡选择。然而,由于在现代处理器中,Cache访问通常是流水线化的,所以很难评估对时钟周期时间的影响。
功耗在选择Cache大小和相联度时也是一个需要考虑的因素,如下图所示。在128KB或256KB Cache中,当从直接映射变为2路组相联时,高相联度的能耗比从大于2到可以忽略。
当功耗变的比较严重时,设计者会集中于寻找降低Cache访问的功耗。在Cache访问中,决定功耗的另一个关键因素是Cache中块(block)的数量,因为它决定了所访问的“行”的个数。设计者通常会在保持Cache大小不变的情况下,增加块的大小来降低“行”的个数,但这会增加缺失率,尤其是在比较小的一级Cache中。
另一种选择是将Cache组织为Banks,以便仅访问Cache的一部分,即所需块所在的Bank。多Bank Cache的主要用途是增加带宽。多Bank还减少了功耗,因为访问了更少的Cache。许多多核处理器中的3级Cache存在逻辑上是统一的,但在物理上是分布式的,并有效地充当多Bank的Cache。根据请求的地址,实际上只有一个物理3级Cache(一个Bank)被访问。
在最近的设计中,有三种除了功耗和访问时间消耗之外的其他因素使得在1级Cache中使用较高的相联度。第一,许多处理器在访问Cache时至少需要两个时钟周期,因此命中时间较长可能不会产生太严重的影响。第二,将TLB排除在关键路径之外(TLB带来的延迟可能要大于高相联度导致的延迟),几乎所有的一级Cache都是虚拟寻址的,这就将Cache的大小限制为页大小与相联度的乘积,这是因为只有页内的位才能用于索引。在完成虚拟地址到物理地址转换之前对Cache进行索引的问题还有另外一些解决方法,但提高相联度还有其他一些好处,更具吸引力。第三,在引入多线程之后,冲突缺失会增加,从而提高相联度更具吸引力。
二、通过路预测技术来降低命中时间