One instruction issue slot is eliminated On mispredicted branch, predicated instruction will not have any effect If sequence following the branch is short, the entire block of the code can be predicated Some Complications Exception Behavior Must not generate exception if the predicate is false – If R10 is zero in the previous example LW R8, 0(R10) can cause a protection fault – If condition is satisfied A page fault can still occur – Biggest Issue Decide when to annul an instruction – Can be done during issue – Early in pipeline Value of condition must be known early, can induce stalls Can be done before commit – Modern processors do this Annulled instructions will use functional resources Register forwarding and such can complicate implementation Limitations of Predicated Instructions Annulled instructions still take resources Fetch and execute atleast For longer code sequences, benefits of conditional move vs branch is not clear Only useful when predicate can be evaluated early in the instruction stream What if there are multiple branches? Predicate on two values? –
One instruction issue slot is eliminated On mispredicted branch, predicated instruction will not have any effect If sequence following the branch is short, the entire block of the code can be predicated Some Complications Exception Behavior – Must not generate exception if the predicate is false If R10 is zero in the previous example – LW R8, 0(R10) can cause a protection fault If condition is satisfied – A page fault can still occur Biggest Issue – Decide when to annul an instruction – Can be done during issue Early in pipeline Value of condition must be known early, can induce stalls – Can be done before commit Modern processors do this Annulled instructions will use functional resources Register forwarding and such can complicate implementation Limitations of Predicated Instructions Annulled instructions still take resources Fetch and execute atleast For longer code sequences, benefits of conditional move vs branch is not clear Only useful when predicate can be evaluated early in the instruction stream What if there are multiple branches? – Predicate on two values?
Hardware-Support-Conditional-Execution.docx