不同Set中是否可以存在相同Tag-ID的缓存块?

问题描述 投票:0回答:1

我目前正在调查我的 CA 课程之前的一些考试。

有一个问题让我感到非常困惑,这是要使用的数据:

考虑具有 4 路组关联缓存的 32 位地址(标签 20 位、索引 7 位、字节偏移 5 位)。两个最低有效地址位始终为零。

缓存最初是空的,并且在获取时总是命中。它是一个写回缓存,始终使用写入未命中策略分配来传输完整的块。

有十六进制的跟踪:

读取 0770 3718 – 写入 0770 3704 – 读取 0770 3768 - [...]

现在回答我的问题:

仅查看前 3 个陈述时:

追踪 标签 设置 偏移
07703718 0000 0111 0111 0000 0011 0111 000 1 1000
07703704 0000 0111 0111 0000 0011 0111 000 0 0100
07703768 0000 0111 0111 0000 0011 0111 011 0 1000

我可能做错了什么,但我认为不同/多个集合中不能有相同的标签。

我查看了计算机体系结构:定量方法,但所有示例都匹配。

caching cpu-architecture cpu-cache
1个回答
0
投票

我认为你做得对。

请记住,索引是地址的一部分,因此即使使用相同的标签,它们也可以代表不同的地址。标记 + 索引部分共同标识主内存的 32 字节范围,而偏移量表示 32 字节范围中的哪个起始字节。

在您的示例中,前两个地址位于主内存的同一 32 字节范围内,因此第二次访问成功。该 32 字节块正在缓存主内存地址范围 0x07703700 到 0x0770371F。

第三个地址是一个完全不同的主内存地址范围 - 它不属于前两次访问的该范围 - 因此尽管标签相同,但映射到不同的索引。该 32 字节块正在缓存主内存地址范围 0x07703760 到 0x0770377F。

4路缓存机制将始终在索引位置0x38处查找地址0x07703718和0x07703704,并在索引位置0x3b处查找地址0x07703768。因此,在那里使用相同的标签不会发生冲突。

© www.soinside.com 2019 - 2024. All rights reserved.