|
|
|
|
|
|
|
Figure 7.46
Distributed reorder buffer method. |
|
|
|
|
|
|
|
|
Figure 7.47
Centralized reorder buffer method with forwarding. |
|
|
|
|
|
|
|
|
functional units as shown in Figure 7.46. Either of these techniques allows out-of-order instruction execution, but preserves in-order putaway to the register set. |
|
|
|
|
|
|
|
|
Using the reorder buffer just described allows instructions to complete out of order, but the results are not available to the following instructions in other than program order; thus, instructions that depend upon a result must wait until all previous instructions are put away. This technique significantly reduces any advantage that the reorder buffer might have had in allowing out-of-order execution. One technique to eliminate this problem is to provide forwardingbypassing the register file from the reorder buffer. (See Figures 7.47 and 7.48.) This allows values held in the reorder buffer (awaiting storage in the register file) to forward their contents to another functional unit while awaiting proper sequential putaway. The functional units and the reorder buffers execute instructions and put away results out of order, while the reorder buffer manages the correct in-order placement of results in the register set. |
|
|
|
|
|
|
|
|
To get a sense of the level of complexity involved, consider the implementation of a 12-entry reorder buffer for a processor with a 2-instruction decoder with 32 general-purpose registers. Each reorder buffer must have the same access bandwidth as the register set (2 instr ´ 2 operands/instr for reads, plus 2 writes each cycle). |
|
|
|
|
|
|
|
|
Each reorder buffer requires four Read ports: two for each source operand (12 ´ 4 = 48 Read ports). |
|
|
|
|
|