InvestorsHub Logo
Followers 2
Posts 522
Boards Moderated 0
Alias Born 09/19/2003

Re: sgolds post# 21094

Thursday, 12/18/2003 12:27:29 PM

Thursday, December 18, 2003 12:27:29 PM

Post# of 97595
I would think the 400 hidden registers are used for context shifts between threads.

You are thinking too high up with the context shifts. OoO registers are for instruction level scheduling level that is much lower level.

Say an instruction comes in and wants to write to register R1 and read from register R2 and a memory location. Now say a 2nd sequential instruction comes in and wants to write to R3 and read from R1 and R2. This 2nd instruction depends on the 1st, so it must wait for it.

Now say a 3rd sequential instruction comes in that also wants to write to R1 and reads from register R4 and R5. There is no interdependency between the 1st and 2nd instructions and this 3rd instruction, yet this 3rd instruction must wait for the 1st instruction to complete before writing to R1 when no OoO registers are available. With an OoO register the processor can execute this 3rd instruction without waiting for the 1st instruction to complete its write to R1. It maps the logical R1 register name to another OoO register for this 3rd instruction. Any instructions that come after this 3rd instruction that use R1 will use the mapped register (Note the first R1 write from instruction 1 was mapped to a physical register too).

This was a simple example, but should give you and idea of the usage of OoO registers. In reality the compiler would have likely caught the dependency above and used different registers to write to, but if you get into highly dynamic sequences (branches with many possible execution paths) only instruction level scheduling will work well, which is why OoO is so important still even with advances in compilers.


HailMary

Volume:
Day Range:
Bid:
Ask:
Last Trade Time:
Total Trades:
  • 1D
  • 1M
  • 3M
  • 6M
  • 1Y
  • 5Y
Recent AMD News