1

这不是家庭作业。我正在阅读这个网站,IMO 对分支预测有很好的介绍,并决定在讲座之后尝试解决一个问题:

考虑以下代码[无分支延迟槽]:

  add  $2, $0, $0
  addi $11, $0, 5
  addi $12, $0, 3
outer:
  addi $2, $2, 1
  add  $1, $0, $0
inner:
  addi $1, $1, 1
  bne  $1, $11, inner
  bne  $2, $12, outer

第一个加法指令位于地址 0。

  1. 如果我们只使用包含 2 个条目的模式历史表,我们的误预测率是多少?[错误预测率 = # 错误预测 / # 预测]
  2. 如果我们使用具有 2 项本地历史表和 4 项模式历史表的本地历史预测器会怎样?

首先,我想知道条件中是否存在错误,并且两个添加指令都必须像其他指令一样,立即为 0 而不是 $0。任何熟悉该主题的人都可以对此发表评论吗?

其次,我试图解决这个问题(考虑到 add 是立即为 0 的 addi,如上所述),并考虑到饱和计数器的初始状态强烈不被采用。我的回答是:

1. 错误预测率 8/10(8 个错误预测,10 个预测)
2. 错误预测率 13/5(13 个错误预测,5 个预测)
任何熟悉该主题的人都可以检查一下吗?只是想知道我是否真的理解了讲座的材料。谢谢。

4

1 回答 1

1

$0(也称为 r0 或 $zero)是一个始终为零的寄存器。便于比较和设置变量,在您的示例中,它用于设置变量。请注意,“add $2, $0, $0”等价于“addi $2, $0, 0”,即(在类似 C 的表示法中)“$2 = 0;”。使用不同格式的 mips 指令(分别为 R 和 I)编码的相同表达式

如果我们以类似 C 的方式编写该汇编代码,它看起来像这样:

$11 = 5;
$12 = 3;

$2 = 0;
while ($2 != $12){
    $2++;
    $1 = 0;
    while ($1 != $11)
        $1++;
    }

希望这可以帮助。

于 2018-11-20T17:18:13.087 回答