2017-06-10 67 views
0

我正试图计算指令缓存命中率。我在模拟器中模拟了一个缓存并用PC提供。我想知道是否需要报告命中率,因为在缓存中找到的PC数量或找到的PC数量以及它们的OpCode字段是否匹配?指令缓存是否存储操作码?

这些问题可以追溯到指令缓存目的的本质。指令缓存是否被用来检索OpCodes?正如我们在分支目标缓冲区(BTB)中存储分支目标一样。在BTB的情况下,我们计算一旦有PC命中并且目标匹配时的命中率。 (更详细地说:一旦分支预测器正确预测并且分支被采用)。我想知道指令缓存是否也有这样的事情。

回答

1

你在混淆分支预测器和缓存的概念。分支预测器用于预测分支的结果预测。如果预测分支被采用,则从BTAC(分支目标地址高速缓存)取得下一个PC。当实际的分支目标和方向被计算出来时,命中信息会在稍后出现。这是您将分支的预测方向和结果与实际结果进行比较的地方。如果它们全部匹配,你会受到打击。

另一方面,高速缓存用于存储数据以快速访问CPU。所以,你不需要比较“操作码”来获得一个命中。

尽管您仍然需要存储操作码,以便您可以在命中时检索它们。要获得缓存命中,您只需从有效缓存行中获取标记并将其与当前标记进行比较即可。这里的标签只是PC的一些部分,取决于你的缓存实现。