这不是家庭作业。我正在阅读this site,IMO对分支预测有很好的介绍,并决定在讲座后尝试解决问题:
考虑以下代码[无分支延迟槽]:
last-of-type
第一个添加指令位于地址0。
- 如果我们只使用带有2个条目的模式历史表,那么我们的错误预测率是多少? [错误预测率=#mispredictions /#predictions]
- 如果我们使用带有2项本地历史记录表的本地历史记录预测器和4项目模式历史记录表怎么办?
醇>
首先,我想知道,如果条件中有错误,并且两个添加指令都必须像其余部分一样,addi是立即0而不是$ 0。任何熟悉该主题的人都能评论它吗?
第二次,我试图解决问题(考虑添加为addi,立即为0,如上所述),并考虑强烈不采用饱和计数器的初始状态。我的答案是:
1.错误预测率8/10(8个误预测,10个预测)
2.错误预测率13/5(13个误预测,5个预测)
任何熟悉该主题的人都可以检查一下吗?只是想知道我是否确实理解了讲座的内容。
感谢。
答案 0 :(得分:1)
$ 0(也为r0或$ zero)是一个始终为零的寄存器。在比较和设置变量时很方便,在您的示例中,它用于设置变量。注意,“ add $ 2,$ 0,$ 0”等效于“ addi $ 2,$ 0,0”,即(类似C的表示法)“ $ 2 = 0;”。使用不同格式的mips指令(R and I respectively)
编码的同一表达式如果我们要以类似C的方式编写该汇编代码,它将看起来像这样:
$11 = 5;
$12 = 3;
$2 = 0;
while ($2 != $12){
$2++;
$1 = 0;
while ($1 != $11)
$1++;
}
希望这会有所帮助。