导言
最近MICRO2024
的论文里面有2个对于Cache
设计比较新颖的设计,对于传统的Cache
的设计有些不同的看法,一般商业的Cache
对预取/替换策略这些设计有比较大的关注,而它们关注的点则有所不同,本文从常规的Cache
优化开始,然后讲今年的MICRO
论文。
Cache优化
缩短命中时间:小而简单的第一级缓存和路预测,这两种技术通常还能降低功耗。
CPU
时钟频率增加以及功耗的权衡导致第一级的缓存的大小受到约束,当前大核的第一级缓存一般是64KB
大小,但出于其它平衡,也有企业使用很小的第一级缓存,例如指令侧的16KB大小。对于相联度各个公司在同样大小的Cache
下没有很大差异。而对于路预测,即预测下次访问Cache
要访问的路,多数设计都是具备的,并且路预测准确度很高(取决于采用哪种预测),也有采用基于某种规律避免下一次对Cache
的访问,这种不算是实际意义的“预测”,因为不存在错误,这种设计有利于节约功耗。
增加缓存带宽:缓存访问流水化、多体缓存和非阻塞缓存。这些技术对功耗有不同的影响。
非阻塞的Cache
也属于当前CPU
的常规设计,简单说是,当出现多个Cache MISS
时,支持乱序取回。当然常规的Cache
设计也会通过多bank
来优化功耗以及存取效率。
其它优化(请参考计算机体系结构)
降低缺失代价:关键字优先,合并写缓冲区。这两种优化对功耗的影响很小。
降低缺失率:编译器优化。显然,针对编译时的各种优化肯定可以降低功耗。
通过并行执行降低缺失代价或缺失率:硬件预取和编译器预取。这些优化方法通常会增加功耗,主要是因为提前取出了未用到的数据。
总结
这些优化并不是都会采用,取决于我们设计时的目标。如何选择set/way
这些对最终的Cache
效果都有影响。当然除了这些优化,目前业界很多精力会放在预取和替换策略上,预取有利于掩盖延迟,替换策略有利于保留更多有效数据在Cache
里面。从这个角度讲,今年的学术研究都是为了保存更多有效的数据在Cache
里面。
工业上的优化
最近几年不太常规的Cache
设计是有的,例如据说ARM将Mop Cache
的一些功能融合到常规的Cache
上。今年Zen5的ICache
双端口设计。安培的超小ICache
等。
学术上的思考
今年CPU微架构模块有2篇关于Cache结构的的论文,分别是Weeding out Front-End Stalls with Uneven Block Size Instruction Cache
和 Customizing Cache Indexing through Entropy Estimation
,两篇论文和以往的研究有所不同。
Weeding out Front-End Stalls with Uneven Block Size Instruction Cache
当前对ICache
的研究主要在预取和替换策略上,更先进的预取被采用,有业界将L1 Cache
替换策略也从之前的PLRU
换成优化的RRIP
。本论文则关注指令的缓存效率,文章分析指出,在缓存块从指令中被踢出前,缓存块中大约60%的字节没有被访问过,说明存储效率很低。而这种现象是因为缓存块大小固定无法适应指令流不同的空间局限性。所以提出了不均匀块大小的缓存块来解决这个问题,具体可以参考论文。
Customizing Cache Indexing through Entropy Estimation
这篇论文对Index作了深入研究,索引在关键路径上,需要满足小延迟,高性能的特点,论文提出基于熵的缓存索引方案,可以保持最小计算成本而提供高性能,这种设计能最大限度平衡缓存的访问分布,具备更高的随机性。
总结
不管是L1还是L2想要做的好都需要比较深入的研究,本文仅提一些思想,不去展开讲设计的权衡。