By: Paul A. Clayton (paaronclayton.delete@this.gmail.com), November 14, 2012 6:41 am
Room: Moderated Discussions
anon (anon.delete@this.anon.com) on November 14, 2012 5:10 am wrote:
[snip]
> When it is said that the front-end handles simple reg,reg moves
> and saves OOOE resources, what does this mean exactly?
>
> Presumably such instruction has to be at least tracked in the ROB somehow. So it may save a physical
> register and an execution unit, but it's not entirely eliminated from OOOE part. Or am I way off base?
A move that occurs immediately before an instruction which uses the destination of the move as a source/destination can effectively be fused with the later instruction. E.g.:
mov R9 <- R10
add R10 <- R10 R15
can be transformed into:
add R10 <- R9 R15
which could occupy a single ROB entry. (Note that each instruction need not maintain a unique ROB entry; ISTR that POWER4 hold up to four instructions plus a branch in each ROB entry.)
Unrestricted move elimination would be more complex. However, even if such requires a ROB entry, it removes the move from the dependence chain--zero-cycle move--(as well as saving a register, temporary use of a scheduler slot, execution unit use, and possibly register file reads). Avoiding execution saves power, of course.
[snip]
> When it is said that the front-end handles simple reg,reg moves
> and saves OOOE resources, what does this mean exactly?
>
> Presumably such instruction has to be at least tracked in the ROB somehow. So it may save a physical
> register and an execution unit, but it's not entirely eliminated from OOOE part. Or am I way off base?
A move that occurs immediately before an instruction which uses the destination of the move as a source/destination can effectively be fused with the later instruction. E.g.:
mov R9 <- R10
add R10 <- R10 R15
can be transformed into:
add R10 <- R9 R15
which could occupy a single ROB entry. (Note that each instruction need not maintain a unique ROB entry; ISTR that POWER4 hold up to four instructions plus a branch in each ROB entry.)
Unrestricted move elimination would be more complex. However, even if such requires a ROB entry, it removes the move from the dependence chain--zero-cycle move--(as well as saving a register, temporary use of a scheduler slot, execution unit use, and possibly register file reads). Avoiding execution saves power, of course.



