【发布时间】:2017-01-14 07:38:33
【问题描述】:
这不是家庭作业。我正在阅读this site,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。
- 如果我们只使用包含 2 个条目的模式历史表,我们的误预测率是多少? [错误预测率 = # 错误预测 / # 预测]
- 如果我们使用具有 2 项本地历史表和 4 项模式历史表的本地历史预测器会怎样?
首先,我想知道,如果条件中有错误,并且两个添加指令都必须像其他指令一样,是立即为 0 而不是 $0 的 addi。有熟悉该主题的人可以评论一下吗?
第二,我试图解决这个问题(考虑add是立即为0的addi,如上所述),并考虑饱和计数器的初始状态强烈不采取强>。我的回答是:
对于 1. 错误预测率 8/10(8 个错误预测,10 个预测)
2. 误预测率 13/5(13 个误预测,5 个预测)
熟悉这个主题的人可以给它检查一下吗?只是想知道我是否真的理解了讲座的材料。
谢谢。
【问题讨论】:
-
Register $0 可能总是 0,而像
addi $11, 0, 0这样的东西是非法的,因为没有 CPU 支持带有两个立即操作数的指令,因为它们实际上并没有用。 -
同意。我的意思是比如 addi $2, $0, 0。不过,在这种情况下它必须是相同的。
标签: assembly branch-prediction micro-architecture