假设这是一个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也是如此。我错过了什么?
感谢任何帮助。
答案 0 :(得分:1)
你的分析是正确的,据我所知,在给定的代码中会遗漏所有内容,但我认为未命中率的含义是缓存未命中的一般概率...否则100%似乎对此特定示例是正确的(也假设你没有遗漏任何问题......如同一些额外的"情报"添加到缓存控制器)