储器层次结|「计算机组成原理」:高速缓存存储器( 三 )



储器层次结|「计算机组成原理」:高速缓存存储器
文章插图
然后我们可以根据这两个数组的地址得到它们在高速缓存中的组索引(因为只有一个高速缓存行,所以不考虑标志位)

储器层次结|「计算机组成原理」:高速缓存存储器
文章插图
我们可以发现,循环第一次迭代引用x[0]时,缓存不命中会使得包含x[0]~x[3]的数据块保存到高速缓存组0处,但是当引用y[0]时,会发现高速缓存组0处保存的数据不匹配,又出现了缓存不命中,就会使得包含y[0]~y[3]的数据块保存到高速缓存0处,依次类推。可以发现始终会发生缓存不命中,使得性能下降。这种情况称为抖动(Thrash),即高速缓存反复地加载和驱逐相同的高速缓存块的组。
可以发现:即使程序的局部性良好,且工作集的大小没有超过高速缓存容量,但是由于这些数据块都被映射到了相同的高速缓存组中,且直接映射高速缓存每个组中只有一个高速缓存行,所以会出现抖动,不断出现缓存不命中。
我们这里想要相同所以的x和y可以保存到不同的高速缓存组中,就能避免抖动现象,这里可以在数组x后填充B个字节,使得数组y的地址向后偏移,得到如下形式

储器层次结|「计算机组成原理」:高速缓存存储器
文章插图
1.1.2 组相连高速缓存
直接映射高速缓存的冲突不命中是由于每个高速缓存组中只有一个高速缓存行,所以扩大E的值,当 1 < E < C/B1<E<C/B时,称为E路组相联高速缓存(Set Associative Cache),此时需要额外的硬件逻辑来进行行匹配,所以更加昂贵。( E < C/BE<C/B即要求 S > 1S>1 )
2路组相连高速缓存

储器层次结|「计算机组成原理」:高速缓存存储器
文章插图
当缓存不命中时需要进行缓存行替换,如果对应的高速缓存组中有空的高速缓存行,则直接将其保存到空行中。但是如果没有空行,就要考虑合适的替换策略:

  • 最简单的替换策略是随机选择要替换的行
  • 最不常使用(Least-Frequently-Used,LFU)策略:替换过去某个时间窗口内引用次数最少的一行。
  • 最近最少使用(Least-Recently-Used,LRU)策略:替换最后一次访问时间最久远的那一行
1.1.3 全相联高速缓存
全相联高速缓存(Full Associative Cache)是用一个包含所有高速缓存行的组组成的,其中 E = C/BE=C/B,即 S = 1S=1 。

储器层次结|「计算机组成原理」:高速缓存存储器
文章插图
由于全相联高速缓存只有一个组,所以不包含组索引编码

储器层次结|「计算机组成原理」:高速缓存存储器
文章插图
其行匹配和字选择与组相联高速缓存相同,只是规模大小不同。想要得到高速的全相联高速缓存十分困难,所以通常适合用于较小的高速缓存,比如虚拟内存中的翻译备用缓冲器(TLB)。