预测分支

时间:2016-03-15 20:00:30

标签: assembly branch branch-prediction

假设处理器具有使编译器能够将初始预测状态指定为分支指令的LT或LNT的特征。考虑一下表格的陈述

如果A> B然后A = A + 1 ELSE B = B + 1

(a)为上述陈述生成汇编语言代码。

(b)在没有任何其他信息的情况下,讨论编译器应如何为汇编代码中的分支指令指定初始预测状态。

(c)对包含上述语句的程序的执行行为的研究表明,变量A的值通常大于变量B的值。如果编译器可以获得此信息,请讨论它如何影响分支指令的初始预测状态。

我想我有a和b部分。对于a部分,这不会是:

假设R0包含A中的值,R1包含B中的值。

       Branch_if_R0>R1   LOOP            //Compares A and B
       Add               R1, R1, #1      //A>B is false so B=B+1
LOOP   Add               R0, R0, #1      //A>B is true so A=A+1

至于b部分,由于循环条件是在循环的开始,这不是LNT吗?对于c部分,如果我们知道A通常大于B,那么这不是LT吗?

1 个答案:

答案 0 :(得分:0)

您的代码存在错误。

 IF A > B THEN A = A + 1 ELSE B = B + 1

汇编语言

       cmp               R0, R1
       jg                LOOP             //Compares A and B
       Add               R1, R1, #1      //A>B is false so B=B+1
       jmp               LOOP1
LOOP:  Add               R0, R0, #1      //A>B is true so A=A+1
LOOP1: