You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

组相联缓存缺失率计算及MIPS代码相关技术问题咨询

关于MIPS链表遍历的缓存与虚拟内存问题咨询

相关代码与已知条件

MIPS链表遍历代码

.data
first-node : .word 10,next-node
next-node: .......
.text
la $s0,first-node
move $s1,$zero
loop:
la $t0,0($s0)
add $s1,$s1,$t0
lw $s0,4($s0)
bne $s0,$zero,loop

已知硬件/数据条件

  • 链表共包含4096个节点
  • 缓存:1路组相联(直接映射),16组,块大小128字节
  • 虚拟内存页大小:4KB

对课堂结论的推导疑问

课堂上给出了以下结论,但我完全摸不清推导逻辑,想请大佬拆解细节:

1) 缓存缺失率计算

课堂结论分阶段给出了缺失率,但我对每个阶段的计算依据都有疑问:

  • 前16次迭代的缺失率:4/(4+2)≈66%(注:4为循环内指令数,2为循环前指令数)

    疑问:这里的“前16次操作”指的是前16次循环迭代吗?为什么缺失数是4?循环里的指令和数据加载的缺失是怎么统计的?

  • 第17次迭代的缺失率:1/6≈17%(我自己猜测是因为加载新节点,但不确定这个逻辑对不对)
  • 第18-32次迭代的缺失率:0/6=0%

    疑问:明明每次循环都要加载新节点的数据和下一个节点的地址,为什么这阶段完全没有缓存缺失?

  • 总缺失率:(4×16+1×15)/(16×16×6)≈5%

    疑问:分子和分母的数字都是怎么来的?完全看不懂这个计算的逻辑。

2) 页故障次数:9次

疑问:每个链表节点是8字节(一个word存数据,一个存下一个节点地址),4096个节点总大小是4096×8=32KB,按4KB的页大小算应该是8页,为什么会出现9次页故障?

3) TLB缺失率:9/(6×4096)≈0.03%

疑问:分母的6×4096是总指令数吗?循环前有2条指令,循环每次4条,4096次循环的话总指令应该是2+4×4096,为什么是6×4096?分子的9是页故障次数,TLB缺失和页故障的对应关系是什么?


额外咨询:缓存路数的差异

想请教一下:1路组相联(直接映射)和2路组相联缓存的核心差异是什么?是不是路数越多,缓存缺失率就一定越低?如果要计算这两种缓存对这段代码的缺失率差异,应该怎么入手?

内容的提问来源于stack exchange,提问作者Kukuriku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:42:21