为什么要实现数据缓存和指令缓存以减少错过?

时间:2016-11-21 19:16:37

标签: caching cpu-architecture

我在这样的问题中不败

  

在内存层次结构的上下文中,为什么要实现数据缓存和   指令缓存?

我回答说,减少冲突未命中数和空间缺失不足是有用的。但是数据缓存和指令缓存可以根据数据和指令的数量来调整大小吗?因为我假设数据的数量高于指令的数量(很多时候我们需要2个数据来执行1个指令),并且数据高速缓存和指令高速缓存的大小根据这个数字来确定。是真的还是完全错的?在错误的情况下,为什么要实现数据缓存和指令缓存以减少错过?

2 个答案:

答案 0 :(得分:1)

缓存的想法是在1个周期内提供缓存数据,以保持CPU以最大速度运行。

现在所有的CPU都是流水线的。这意味着它们具有独立的模块,例如获取指令,解码,获取操作数,执行指令,并写回结果。对于不同的指令,所有这些流水线阶段都可以同时执行 为了获得最大速度,必须在获取之前解码的先前指令的操作数获取的同时完成指令获取。如果一个具有指令缓存和数据缓存,则两者只能在1个周期内同时完成(在最佳情况下)。

答案 1 :(得分:0)

拥有两个缓存(指令和数据)的另一个可能原因是Thrashing。想象一下,您的指令和数据驻留在索引位相同的两个内存位置。假设有一个直接映射的缓存,(我知道,厚颜无耻),就像这样。

  1. 从内存中获取指令,计算索引并将其存储在那里。
  2. 解码指令并获取数据地址。
  3. 现在从内存中获取数据,计算存储数据的索引。
  4. 该位置有一些数据,太糟糕了,将它刷新到下一级缓存并存储新获取的数据。
  5. 执行指示。
  6. 它是时候解码下一条指令,以及我们交换数据的缓存条目时的缓存未命中。现在再去取一下。
  7. 当我们获取它时,我们必须再次替换我们的数据,因为它具有相同的索引。
  8. 因此,我们将不断地将数据和指令交换为相同的缓存行,即捶打。