Memory L1d CPU缓存标记存储在哪里?

Memory L1d CPU缓存标记存储在哪里?,memory,cpu-architecture,cpu-cache,Memory,Cpu Architecture,Cpu Cache,我正在阅读,我正在与CPU缓存标签的概念作斗争(第15页) 如果我理解正确的话,每个CPU缓存线都有一个标记,它指定给定缓存线对应于主内存中的哪些数据。也就是说,如果您写入一个特定的行,那么您可以使用标记来找出您应该将这一行的内容写入RAM中的哪个位置。相反,如果您将数据从RAM读取到一级缓存线中,您将从RAM地址计算一个标记并将其存储在某个位置,这样您就知道一级缓存线中的数据来自何处。标记类似于指针 我想问这个标签本身是否写在缓存线的某个地方,或者在一级缓存旁边是否有一些特殊的内存来存储标签?

我正在阅读,我正在与CPU缓存标签的概念作斗争(第15页)

如果我理解正确的话,每个CPU缓存线都有一个标记,它指定给定缓存线对应于主内存中的哪些数据。也就是说,如果您写入一个特定的行,那么您可以使用标记来找出您应该将这一行的内容写入RAM中的哪个位置。相反,如果您将数据从RAM读取到一级缓存线中,您将从RAM地址计算一个标记并将其存储在某个位置,这样您就知道一级缓存线中的数据来自何处。标记类似于指针

我想问这个标签本身是否写在缓存线的某个地方,或者在一级缓存旁边是否有一些特殊的内存来存储标签?


在我的系统中,L1行大小为64字节,ponter为8字节。我是否应该将程序中频繁迭代的对象设置为不超过64字节?或者,考虑到标记的大小不应大于指针的大小,我是否应将目标设置为56字节?

缓存比主内存小。因此,您需要一种机制来将大量的主内存项映射到较少的缓存项。为了高效、廉价地完成大多数缓存所做的工作,我需要使用地址中的一些最低有效位(比如10位)来索引缓存条目。如果选择地址的至少10位,则缓存中有1024个条目。此外,很可能有多个内存地址具有相同的至少10位。因此,您需要用相同的至少10位来区分不同的内存地址。因此,标签的作用就是为了服务于此。当您要在缓存中存储数据时,将使用至少10位来选择条目。将缓存线视为一个条目,其中有两个字段需要填充,第一个字段是存储剩余地址位的标记,第二个字段是存储数据的字段

当有人说缓存线是xxx字节(就像您的例子中的64字节)时,他们指的只是数据部分。因此,在您的情况下,如果希望数据与缓存线对齐,则需要将它们填充为64字节,而不是56字节


尺寸也一样。当引用缓存的大小时,它通常意味着整个数据部分的大小,由于额外的簿记(如标记、有效位等),实际大小会稍大一些

谢谢!那么,你的意思是,我的缓存线的实际硬件大小是64+一个标记的大小?对于其他内容,如有效位、脏位等,要多一点;对于纠错位,要多一点;对于各种性能调整,要多一点(例如,替换策略的最新数据)。它甚至不必驻留在同一个硬件结构中,标签和数据通常是分开的,因为您甚至不需要访问数据,除非您点击