ILP2
ILP2
Reorder Buffer
ROB4
ROB3
ROB2
Oldest
F0 LD F0,10(R2) N ROB1
Registers To
Memory
Dest from
Dest
Memory
Dest
Reservation 1 10+R2
Stations
FP adders FP multipliers
Tomasulo With Reorder buffer:
Done?
FP Op ROB7 Newest
Queue ROB6
ROB5
Reorder Buffer
ROB4
ROB3
F10 ADDD F10,F4,F0 N ROB2
Oldest
F0 LD F0,10(R2) N ROB1
Registers To
Memory
Dest from
Dest
2 ADDD R(F4),ROB1 Memory
Dest
Reservation 1 10+R2
Stations
FP adders FP multipliers
Tomasulo With Reorder buffer:
Done?
FP Op ROB7 Newest
Queue ROB6
ROB5
Reorder Buffer
ROB4
F2 DIVD F2,F10,F6 N ROB3
F10 ADDD F10,F4,F0 N ROB2
Oldest
F0 LD F0,10(R2) N ROB1
Registers To
Memory
Dest from
Dest
2 ADDD R(F4),ROB1 Memory
3 DIVD ROB2,R(F6)
Dest
Reservation 1 10+R2
Stations
FP adders FP multipliers
Tomasulo With Reorder buffer:
Done?
FP Op ROB7 Newest
Queue F0 ADDD F0,F4,F6 N ROB6
F4 LD F4,0(R3) N ROB5
Registers To
Memory
Dest from
Dest
2 ADDD R(F4),ROB1 Memory
6 ADDD ROB5, R(F6) 3 DIVD ROB2,R(F6)
Dest
Reservation 1 10+R2
Stations 5 0+R3
FP adders FP multipliers
Tomasulo With Reorder buffer:
Done?
FP Op -- ROB5 ST 0(R3),F4 N ROB7 Newest
Queue F0 ADDD F0,F4,F6 N ROB6
F4 LD F4,0(R3) N ROB5
Reorder Buffer --
F2
BNEZ F2,<…> N ROB4
DIVD F2,F10,F6 N ROB3
F10 ADDD F10,F4,F0 N ROB2
Oldest
F0 LD F0,10(R2) N ROB1
Registers To
Memory
Dest from
Dest
2 ADDD R(F4),ROB1 Memory
6 ADDD ROB5, R(F6) 3 DIVD ROB2,R(F6)
Dest
Reservation 1 10+R2
Stations 5 0+R3
FP adders FP multipliers
Tomasulo With Reorder buffer:
Done?
FP Op -- M[10] ST 0(R3),F4 Y ROB7 Newest
Queue F0 ADDD F0,F4,F6 N ROB6
F4 M[10] LD F4,0(R3) Y ROB5
Reorder Buffer --
F2
BNEZ F2,<…> N ROB4
DIVD F2,F10,F6 N ROB3
F10 ADDD F10,F4,F0 N ROB2
Oldest
F0 LD F0,10(R2) N ROB1
Registers To
Memory
Dest from
Dest
2 ADDD R(F4),ROB1 Memory
6 ADDD M[10],R(F6) 3 DIVD ROB2,R(F6)
Dest
Reservation 1 10+R2
Stations
FP adders FP multipliers
Tomasulo With Reorder buffer:
Done?
FP Op -- M[10] ST 0(R3),F4 Y ROB7 Newest
Queue F0 <val2> ADDD F0,F4,F6 Ex ROB6
F4 M[10] LD F4,0(R3) Y ROB5
Reorder Buffer --
F2
BNEZ F2,<…> N ROB4
DIVD F2,F10,F6 N ROB3
F10 ADDD F10,F4,F0 N ROB2
Oldest
F0 LD F0,10(R2) N ROB1
Registers To
Memory
Dest from
Dest
2 ADDD R(F4),ROB1 Memory
3 DIVD ROB2,R(F6)
Dest
Reservation 1 10+R2
Stations
FP adders FP multipliers
Tomasulo With Reorder buffer:
Done?
FP Op -- M[10] ST 0(R3),F4 Y ROB7 Newest
Queue F0 <val2> ADDD F0,F4,F6 Ex ROB6
F4 M[10] LD F4,0(R3) Y ROB5
Reorder Buffer --
F2
BNEZ F2,<…> N ROB4
DIVD F2,F10,F6 N ROB3
F10 ADDD F10,F4,F0 N ROB2
Oldest
What about memory F0 LD F0,10(R2) N ROB1
hazards???
Registers To
Memory
Dest from
Dest
2 ADDD R(F4),ROB1 Memory
3 DIVD ROB2,R(F6)
Dest
Reservation 1 10+R2
Stations
FP adders FP multipliers
Summary
• Reservations stations: implicit register renaming to larger set of
registers + buffering source operands
– Prevents registers as bottleneck
– Avoids WAR, WAW hazards
– Allows loop unrolling in HW
• Not limited to basic blocks
• Today, helps cache misses as well
– Don’t stall for L1 Data cache miss
• Lasting Contributions
– Dynamic scheduling
– Register renaming
• 360/91 descendants are Pentium III; PowerPC 604; MIPS R10000;
HP-PA 8000; Alpha 21264