【发布时间】:2014-06-26 14:53:43
【问题描述】:
假设这是一个 MIPS 处理器,字长为 32 位,地址是字对齐的。
问题如下:
计算大小(容量)为 16 个字且块大小为 4 个字的直接映射缓存的未命中率。假设缓存最初是空的。代码如下:
lw $s0, 0($0)
lw $s0, 0x10($0)
lw $s0, 0x20($0)
lw $s0, 0x30($0)
lw $s0, 0x40($0)
我确实有这个问题的答案,它是 2/5 = 40%,但我认为它是 100%。我不确定我错过了什么。谁能解释一下如何计算未命中率?
这是我的推理
这是一个 16 字直接映射缓存,每块 4 个字。这意味着有 4 组,16/4 = 4。由于地址是字对齐的,字大小是 4 个字节(32 位),地址的低两位无关紧要。由于每个块有 4 个字,这意味着需要接下来的 2 位来确定块偏移量,并且由于有 4 组,因此需要接下来的两位来确定组号。剩下的都用于标签。
-----------------------------------------------------
address | tag | set number | block offset | byte offset |
|-----------|------------|--------------|-------------|
bit number | 31 6 | 5 4 | 3 2 | 1 0 |
-----------------------------------------------------
地址 0x0 映射到设置 0。由于块大小为 4 个字,CPU 需要在地址 0x0、0x4、0x8、0xC 加载 4 个字。
地址0x10,映射到set 1。CPU需要加载4个字,地址为0x10、0x14、0x18、0x1C
地址 0x20、0x30 和 0x40 也是如此。我错过了什么?
感谢任何帮助。
【问题讨论】:
-
没错,我假设是字寻址。你介意扩大答案吗?我不太清楚。
标签: caching memory memory-management computer-architecture cpu-cache