【问题标题】:Does Instruction cache store opcode?指令缓存是否存储操作码?
【发布时间】:2017-11-12 16:21:12
【问题描述】:
我正在尝试计算指令缓存命中率。我在我的模拟器中模拟了一个缓存并用 PC 提供它。我想知道是否需要将命中率报告为在缓存中找到的 PC 数量或找到的 PC 数量并且它们的 OpCode 字段匹配?
这些问题可以追溯到指令缓存目的的性质。指令缓存是否用于检索操作码?正如我们在存储分支目标的分支目标缓冲区(BTB)中所做的那样。在 BTB 情况下,一旦 PC 命中以及目标匹配,我们就会计算命中率。 (更详细地说:一旦分支预测器正确预测并采用分支。)我想知道指令缓存是否也有这样的东西。
【问题讨论】:
标签:
caching
memory-management
cpu-architecture
processor
【解决方案1】:
您混淆了分支预测器和缓存的概念。分支预测器用于预测分支的结果。如果预测将采用分支,则从 BTAC(分支目标地址缓存)中取出下一个 PC。在计算实际的分支目标和方向时,命中信息稍后会出现。在这里,您可以将分支的预测方向和结果与实际结果进行比较。如果所有这些都匹配,您就会获得成功。
另一方面,缓存用于存储数据,以便快速访问 CPU 的数据。因此,您无需比较“操作码”即可获得成功。
尽管您仍然需要存储操作码,以便在点击时检索它们。要获得缓存命中,您只需从有效缓存行中获取标签并将其与当前标签进行比较。这里的标签不过是 PC 的一些位,具体取决于您的缓存实现。