分离标签数组与结合数据数组

Separated tag array versus combined with data array

我想知道标签通常存储在哪里。我见过一些组合标签数据缓存,其中标签和数据存储在一起,并且当存在与内存地址匹配的标签时,在访问数据部分之前只访问标签部分。 另一方面,我看到了完全分离的标签和数据缓存,具有分离的有效位和其他位。

我想知道这些方法中哪些是常用的,这两种结构在性能或能源效率方面是否存在差异?

提前致谢。

一级缓存通常实现为虚拟索引和物理标记。这意味着您获取虚拟地址,获取索引位并开始在缓存中定位由索引位索引的条目。同时,你将虚拟地址下发给虚拟到物理的翻译单元——(如:TLB)并得到物理地址。

如果未设置有效位,则您将物理地址发送到下一级缓存。如果设置了有效位,(此时您已经从 TLB 获得了物理地址),您就可以进行标签比较。

将缓存行 + 标记实现视为可以通过索引位进行索引的列表元组(例如:在 python 中)。在列表中找到条目后,检查所选元组中标记的第 0 个条目和数据的第 1 个条目。

现在真正的问题是我们是否在缓存中保持标签和数据在物理上相邻,这样做有什么好处?我认为这取决于您将使用缓存的应用程序域类型。

现在认为标签和数据部分是两个独立的单元,它们可以打开或关闭(不关闭,只是 DVFS)。

如果您的应用程序有更高的比率(num cache accesses/num instructions executed)保持通电和链接是有意义的,因为您更有可能收到缓存请求并且当标签指示命中数据已准备就绪。

如果您的应用程序执行的(num cache accesses/num 条指令)比率较低,则没有必要浪费电力来保持两者都通电。您可以保持标签通电并在标签中命中,您通电数据部分并响应。