15.1 Tomasulo’s

The following video illustrates Tomasulo’s OoO-Execution Algorithm very well:
https://www.youtube.com/watch?v=zS9ngvUQPNM

Tomasulo’s creates Reservation Stations which buffer instructions for the various arithmetic-subunits of the ALU, in order to increase the concurrency.

These tag the different values and then broadcast the result out to all subscribers, which saves a cycle of register access.

15.2 Hazards

There are multiple different types of dependencies between instructions:

  • Read after Write (RaW)
  • Write after Write (WaW)
  • Write after Read (WaR)

The only “true dependency” is a RaW dependency, as we actually need the “updated” value.

There are also architectural dependencies WaW and WaR. These can be fixed by renaming the registers accessed.

15.3 Tomasulo Addition (ROB, RAT)

15.3.1 Reorder Buffer (ROB)

The reorder buffer works by allowing out of order execution of statements, which then commit their results into memory in program order.

15.3.2 Register Alias Table (RAT)

The RAT allows us to reduce the duplication of values. Without it the ROB and register files would each store the value.

With the RAT as a global value store, we can ensure that each component only has a pointer to a value within the RAT.