
[英]Why does Branch Target Buffer affect return from function calls? [WinMIPS64]
[英]winmips64 branch target buffer does 2 cycles stall
所以我一直在寻找为什么在winmips64上每次分支目标缓冲区错误预测时都会出现2个周期停顿,但我什么也没得到。所以它错误预测了bne第一次和最后一次运行。第一次说它的2个分支循环停顿并且在分支错误预测的最后 2 个周期中,有什么想法吗?代码的另一部分提到了 R12
lw R4,0(R3)
lw R8,0(R2)
dmul R8,R8,R4
daddi R3,R3,-8
daddi R11,R2,-8
dadd R9,R9,R8
daddi R2,R2,-8
bne R11,R12,loop
我不知道具体的 winmips64 架构,即它与其他 MIPS 流水线实现有何不同或没有什么不同。 所以,如果其他人知道细节,如果我错了,请纠正我。
采取的分支和错误预测都花费 2 个周期与标准的 5 阶段流水线一致,其中分支决定(采取/未采取)在 EX 阶段完全解决,因此必须刷新前面阶段的指令,IF 和 ID,当它错了。
分支第一次执行时,分支预测器不知道,处理器似乎在假设未采用的情况下向前移动; 因此,有关分支的消息被搁置。
最后一次执行分支时,分支预测器知道,但是,分支没有被采用,这与预测不匹配,因为预测器假设它将继续循环,就像它刚刚做的那样。 因此,错误预测的消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.