【发布时间】:2011-02-15 17:50:07
【问题描述】:
我试图了解 CPU 缓存是如何运行的。假设我们有这个配置(例如)。
- 缓存大小 1024 字节
- 缓存行 32 字节
- 1024/32 = 总共 32 个缓存行。
- 单个缓存行可以存储 32/4 = 8 个整数。
1) 根据这些配置,标签长度应为 32-5=27 位,索引大小为 5 位(2^5 = 缓存行中每个字节的 32 个地址)。
如果总缓存大小为 1024 并且有 32 个缓存行,那么标签+索引存储在哪里? (还有一个4*32 = 128字节。)是不是说缓存的实际大小是1024+128 = 1152?
2) 如果在本例中缓存行是 32 字节,这意味着每当 CPU 需要从 RAM 中获取新字节时,都会将 32 字节复制到缓存中。我是否正确假设所请求字节的缓存行位置将由其地址确定?
这就是我的意思:如果 CPU 在[FF FF 00 08] 处请求字节,那么可用的缓存行将被从[FF FF 00 00] 到[FF FF 00 1F] 的字节填充。而我们请求的单个字节将位于位置[08]。
3) 如果前面的陈述是正确的,这是否意味着用于索引的 5 位在技术上是不需要的,因为所有 32 字节都在缓存行中?
如果我有什么问题,请告诉我。 谢谢
【问题讨论】: