Other register renaming techniques
Tomasulo implements an implicit register renaming: the code is not changed and there is dynamic loop unrolling.
But there are other possible techniques for register renaming
Compiler transformation: loop unrolling
The compiler unrolls a loop n number of times, where n is called unrolling factor and then procedes to rename the registers to avoid WAR and WAW hazards. Other optimizations are also possible.
Explicit register renaming
Using physical register file that is larger than number of registers specified by the ISA we allocate a new physical destination register for every instruction that writes a result.
Physical Registers are not exposed to the compiler because not specified by the ISA.
A translation table must keep track of which ISA register is located to which physical register.
This technique has some advantages:
- Decouples the concept of renaming from scheduling: the pipeline can be whatever (MIPS, Tomasulo, Scoreboard, ...)
- Allows data to be fetched from single register file: no need of reorder buffer.