我有一个与相关预测因子相关的练习,它指出以下几点:
答:贝兹·R1,D
…
D:贝兹·R1,F
…
F:不是R1的R1
预测工作如下
>
获取当前指令
如果是分支,则确定预测器的当前状态并预测分支:
a.row 由分支地址确定(在本例中为 A 或 D) b.
列由当前全局移位寄存器确定
c.使用单元格中的值确定来自状态机的预测(当前状态保存在单元格中)
执行分支,并确定实际决策(已采取:1,未采取:0):
a、 基于当前状态和实际决策更新单元
b。更新全局移位寄存器(向左移位并向右添加实际决策位)
转到步骤1
这是解题练习
我理解这个方案,知道2位预测器意味着更少的错误,但我无法解决这个问题,我很难找到解决方案,任何帮助将不胜感激。
这是Agner Fog的微架构论文(第15页)中简要描述的具有全局历史表的两级自适应预测器的变体。
在此变体中,历史寄存器在所有分支之间共享,但模式历史记录表是分支1 的本地。
最后n个(n=2,在您的情况下)分支的结果被记住(0=未取,1=已取),按时间顺序从左到右排序,形成一个n位的值,该值与分支地址2一起用于索引2位饱和计数器的表。
如果执行分支,则每个计数器递增,否则递减(这是规范实现,任何4状态FSA都可以)
每个计数器值的含义是:
00b (0) Strongly not taken
01b (1) Weakly not taken
10b (2) Weakly taken
11b (3) Strongly taken
饱和意味着3 1(再次采用强采用的分支)= 3和0-1(再次不采用强不采用的分支)= 0,而寄存器上的运算通常是模2n。
在您的练习中,假设是:
R1
在开头为 0。 让我们只看第一次迭代。
第一次迭代
指令是BEQZ R1,D
(显然是一个分支),它的地址是A
。
由于 R1
为 0,因此分支将被采用(朝向 D
)。
索引到全局历史记录为 00b 且地址为 A
的表中,会给我们计数器值 01b(弱未采用),因此不会进行预测。
一旦CPU执行了分支并刷新了预测错误的阶段,就必须更新该表。< br >由于执行了分支,计数器从01b递增到10b。< br >最后,由于执行了分支,全局历史从00b变为01b(从右侧移入1)。
请注意,黄色突出显示的条目是在执行相应指令时读取的条目,而绿色条目是由先前预测更新的条目。
因此,要查看计数器值已递增,您必须查看下一行。
由于执行了分支,CPU处于D
(BEQZ R1,F
),这与之前完全相同,只有全局历史寄存器的值为01b。
执行此指令后,CPU 处于 F
,因此 R1 变为 111
..11b(解决方案仅将其指示为 1),并且重新执行上述两个分支。
1这是一个简化,表几乎总是缓存。对于可以找到分支的每个可能的内存地址,输入一个条目是不切实际的。
2部分地址用作缓存中的索引,一旦选择了一个集合,该地址将再次与该集合的每种方式的标签进行比较。
我想知道英特尔 i7 处理器的分支预测是如何工作的? 目前,我知道称为“动态分支预测”的预测器。 对于1位预测器:硬件总是预测分支指令的方向与上次执行时的方向相同。 在实践中效果更好的改进版本是2位预测器。为了进一步提高预测精度,引入了2位预测方案。在这些方案中,预测必须错误两次才能改变。 i7有和上面一样的预测器吗
如果语句更多地依赖于分支预测,而v表查找更多地依赖分支目标预测,那么
分支目标预测(BTP)与分支预测(BP)不同。我知道BTP会找到分支将跳转到的位置,而BP只是决定可能采取哪个分支。 BTP依赖BP吗,如果BTP不使用BP来预测哪个分支被采用,它怎么可能知道分支的目标呢? 我不明白为什么会有这么大的差异?一旦分支被预测为被占用,找到目标并不像读取指令中的地址一样简单吗?
编辑:我的困惑出现了,因为通过预测哪个分支,你肯定也在有效地进行目标预测?? 这个问题与我关于这个主题的第一个问题有内在联系: 分支预测与分支目标预测 无限循环 语句 或语句 语句的“then”子句结尾(跳过子句) 非虚函数调用 从函数返回 虚函数调用 函数指针调用 语句(如果编译为跳转表) 语句 语句(如果编译成一系列语句) 循环条件测试 和运算符 三元运算符 null 如果我有以下代码: (B
我的代码经常调用具有多个(不可预测的)分支的函数。当我分析时,我发现这是一个小瓶颈,大部分CPU时间用于条件JMP。 考虑以下两个函数,其中原始函数有多个显式分支。 这是一个新函数,我试图在其中删除导致瓶颈的分支。 然而,当我分析新代码时,性能只提高了大约20%,而且调用本身(对mem_funcs数组中的一个func)花费了很长时间。 第二个变量仅仅是一个更隐含的条件吗,因为CPU仍然无法预测将要
我正在读一本关于计算机体系结构的书,我在这一章讨论分支预测。有一个小练习,我很难把我的头缠绕在它周围。 考虑以下内部for循环 ------>内循环: b)1位分支预测缓冲器会改善性能吗(与a相比)?假设第一个预测是“未采取”,并且没有其他分支映射到该条目。 ----假设第一个预测是“不采取”,如果预测错误,则1位预测器反转该位。所以它将是NT/T/T。这是否使它具有与问题a)相同的性能?有1个未