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

文章插图
然后我们可以根据这两个数组的地址得到它们在高速缓存中的组索引(因为只有一个高速缓存行,所以不考虑标志位)
文章插图
我们可以发现,循环第一次迭代引用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)策略:替换最后一次访问时间最久远的那一行
全相联高速缓存(Full Associative Cache)是用一个包含所有高速缓存行的组组成的,其中 E = C/BE=C/B,即 S = 1S=1 。

文章插图
由于全相联高速缓存只有一个组,所以不包含组索引编码

文章插图
其行匹配和字选择与组相联高速缓存相同,只是规模大小不同。想要得到高速的全相联高速缓存十分困难,所以通常适合用于较小的高速缓存,比如虚拟内存中的翻译备用缓冲器(TLB)。
- 多年养花总结:大蒜能治蚜虫、浇水要控温、换盆可美化株型
- 辅食添加|6月辅食添加总结,最真实的反馈来啦!
- 君王|此人把怀孕妻子送给皇帝,结果却被妻子极其哥哥处死
- 就是|此人想学自己老爹造反称帝,结果却被活活烤死,下场极其悲催
- 女儿|吕布被曹操斩首后,把赤兔马送给关羽,吕布之女结局如何?
- 恭喜!他们结婚了!
- 金弹子不结果,这3大原因造成的,对症下药提高座果率
- 美女带满绿翡翠观音进行鉴宝,纠结嫁妆选观音还是房产?
- 伯温|刘伯温智比诸葛亮,才比萧何张良,可结局却是那么地悲凉!
- 此皇帝因偷国库中的钱,结果朝会时被群臣从龙椅上拖下来痛打20棍
