计算直接映射缓存的未命中率

时间:2014-05-09 00:36:27

标签: caching memory memory-management computer-architecture cpu-cache

假设这是一个32位字长的MIPS处理器,地址是字对齐的。

问题如下:

计算直接映射缓存的未命中率,其大小(容量)为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位),因此地址的低2位无关紧要。由于每个块有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需要加载4个字,地址为0x0,0x4,0x8,0xC。

地址0x10,映射到设置1. CPU需要加载4个字,地址为0x10,0x14,0x18,0x1C

地址0x20,0x30和0x40也是如此。我错过了什么?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

你的分析是正确的,据我所知,在给定的代码中会遗漏所有内容,但我认为未命中率的含义是缓存未命中的一般概率...否则100%似乎对此特定示例是正确的(也假设你没有遗漏任何问题......如同一些额外的"情报"添加到缓存控制器)