我想知道标签通常存储在哪里。我已经看到了一些组合标签数据缓存,其中标签和数据一起存储,并且当存在与存储器地址匹配的标签时,在访问数据部分之前仅访问标签部分。 另一方面,我看到完全分离的标记和数据缓存,具有分离的有效位和其他位。
我想知道这些方法中哪些是常用的,以及这两种结构之间在性能或能效方面是否存在差异?
提前致谢。
答案 0 :(得分:1)
第一级缓存通常实现为虚拟索引和物理标记。这意味着您获取虚拟地址,获取索引位并开始在缓存中找到索引位索引的条目。同时,您将虚拟地址发送到虚拟到物理转换单元 - (例如:TLB)并获取物理地址。
如果未设置有效位,则将物理地址发送到下一级缓存。如果设置了有效位(此时您已经拥有TLB的物理地址),则执行标记比较。
将cacheline +标记实现视为列表元组(例如:在python中),可以通过索引位索引。找到列表中的条目后,检查标记的第0个条目和所选元组中数据的第1个条目。
现在真正的问题是,我们是否在缓存中保持标签和数据在物理上相邻,以及我们通过这样做获得了哪些好处?我认为它将归结为您将使用缓存的哪种应用程序域。
现在想一下标签和数据部分是两个独立的单元,它们可以上电或下电(不关闭,只需DVFS)。
如果您的应用程序具有更高的比率(执行num cache accessses / num指令),那么保持上电和链接都是有意义的,因为您更有可能获得缓存请求,并且当标记指示命中数据为实时时并准备好了。
如果您的应用程序具有较低的比率(执行num cache accessses / num指令),那么就没有浪费电力来保持两个电源都上电。你可以保持标签启动和标签上的命中,你启动数据部分并做出响应。