Replies: 4 comments 3 replies
-
Is freeing up the destination rename register being delayed beyond retirement of the instruction? Is that still needed, even though architectural registers (and rename table, too) are being updated on retirement? |
Beta Was this translation helpful? Give feedback.
-
Can we parameterize register allocation to support both styles, i.e., PowerPC E500 style and MIPS style as described in those slides, with the MIPS style unimplemented for now? |
Beta Was this translation helpful? Give feedback.
-
Thank you @aarongchan for driving this and @klingaard for continuing to advise. Sorry for not being able to review code earlier. I was thinking if we can develop an API for rename in order to support both methods of rename and possibly fold Aaron's code into that API. Thinking more about that API, this is what comes to my mind: A class Rename with following public methods:
Then this API can be used to implement different flavors of rename. For example, for our current chosen flavor, handleException(...) would be passthrough. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Register Renaming
Olympia is going to adopt PowerPC E500's register renaming style (see differences in the last slide here) for the reason of simplicity. There is a set of physical registers held by rename unit and we classify them to two different sets:
Rename Register Allocation
Rename unit holds the register map that tells which (architecture/rename) register holds the latest value for the renaming instruction to read. Rename unit then updates the register map after it allocates new rename register for the renaming instruction. Rename unit will be stalled when there is no available rename register, and waked up by ROB returning rename registers.
Life Time of Rename Register
ROB writes back the value of rename register to architecture register when ROB is retiring an instruction. However, ROB only frees the destination rename register of the retiring instruction when no younger instructions reference it, in case younger instructions read false values. In the model, Olympia will maintains a reference counter for every rename register to know when it is safe to be freed. The reference counter increments when the rename register is just allocated for writing instructions or referenced by reading instructions. As ROB retires reading instructions, the reference counter of source rename register decreases by one.
Rebuild in Pipeline Flush
No needs. Since architecture states are held by architecture registers, no register map update will be needed when an exception or branch mis-prediction happens.
Beta Was this translation helpful? Give feedback.
All reactions