【发布时间】:2011-03-14 13:27:27
【问题描述】:
最近我在阅读一些关于 cpu 缓存的资料。我想知道cpu如何查找L1和L2缓存以及cpu缓存中的数据以什么格式存储?
我认为缓存的线性扫描效率低下,有没有更好的解决方案?
谢谢。
【问题讨论】:
最近我在阅读一些关于 cpu 缓存的资料。我想知道cpu如何查找L1和L2缓存以及cpu缓存中的数据以什么格式存储?
我认为缓存的线性扫描效率低下,有没有更好的解决方案?
谢谢。
【问题讨论】:
它使用从它正在查找的地址中提取的索引位和标签。
假设您正在访问一些 32 位地址 ADDR
ADDR 将有位:31--------------------------0,[------tag|index|offset]
然后根据缓存的大小: 假设您有一个 32K 的 Direct Mapped 缓存,每块 32 字节。
偏移位用于查找每行中的数据,因为 8 字节是被带入缓存的最小数据大小(你总是会得到完整的 32 字节,但在 32 字节内你会得到你的数据。)
这说明了一个有 1024 行或集合的缓存,同样每行有 32 个字节。为了索引 1024 个集合,您需要 10 位。因此,您地址中的 10 位用作缓存的索引。偏移位用于查看数据在该行内的位置,标记位用于匹配您正在查找的地址,因为两个或多个地址将映射到缓存的同一行。 有意义吗?
【讨论】:
我不知道你的答案,但我可以推荐一本好书,可能会引导你找到答案 - The Essentials Of Computer Organization and Architecture
【讨论】: