对于小尺寸的缓存,直接映射指令缓存有时可以使用LRU替换优于完全关联的指令缓存。
任何人都可以通过示例访问模式解释这是如何实现的吗?
答案 0 :(得分:3)
对于小尺寸的缓存,可能会发生这种情况。让我们比较大小为2的缓存。
在我的例子中,直接映射的“DM”缓存将使用行A表示奇数地址,将行B表示偶数地址。
LRU缓存将使用最近最少使用的行来存储未命中的值。
我建议的访问模式是13243142
(重复次数达到想要的次数)。
以下是botch缓存算法的行为细分:
H - hits
M - misses
----- time ------>>>>>
Accessed: 1 | 3 | 2 | 4 | 3 | 1 | 4 | 2
\ \ \ \ \ \ \ \
LRU A ? | ? | 3 | 3 | 4 | 4 | 1 | 1 | 2 |
B ? | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 |
M M M M M M M M
DM A ? | 1 | 3 | 3 | 3 | 3 | 1 | 1 | 1 |
B ? | ? | ? | 2 | 4 | 4 | 4 | 4 | 2 |
M M M M H M H M
这为LRU提供了8个未命中,为直接映射提供了6个未命中。让我们看看如果这种模式永远重复会发生什么:
----- time ------>>>>>
Accessed: 1 | 3 | 2 | 4 | 3 | 1 | 4 | 2
\ \ \ \ \ \ \ \
LRU A | 2 | 3 | 3 | 4 | 4 | 1 | 1 | 2 |
B | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 |
M M M M M M M M
DM A | 1 | 3 | 3 | 3 | 3 | 1 | 1 | 1 |
B | 2 | 2 | 2 | 4 | 4 | 4 | 4 | 2 |
H M H M H M H M
因此,直接映射的缓存将具有50%的命中率,其优于LRU的0%命中率。
这样做是因为:
因此,一旦可以为更大的高速缓存大小构建类似的模式,但是高速缓存大小越大,这种模式需要的时间越长。这与直觉相对应,对于较大的缓存来说,以这种方式利用它们会更加困难。