Jump to content

Operand forwarding

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by 192.55.54.40 (talk) at 11:24, 15 September 2014 (External links). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Operand forwarding is an optimization in pipelined CPUs to limit performance deficits which occur due to Pipeline stalls. A data hazard can lead to a Pipeline stall when the current operation has to wait for the results of an earlier operation which has not yet finished.

Example

ADD A B C  #A=B+C
SUB D C A  #D=C-A

If these two assembly pseudocode instructions run in a pipeline, after fetching and decoding the second instruction, the pipeline stalls, waiting until the result of the addition is written and read.

Without operand forwarding
1 2 3 4 5 6 7 8
Fetch ADD Decode ADD Read Operands ADD Execute ADD Write result
Fetch SUB Decode SUB Read Operands SUB Execute SUB Write result


With operand forwarding
1 2 3 4 5 6
Fetch ADD Decode ADD Read Operands ADD Execute ADD Write result
Fetch SUB Decode SUB Read Operands SUB: use result from previous operation Execute SUB Write result

Technical realization

The CPU control unit must implement logic to detect dependencies where operand forwarding makes sense. A multiplexer can then be used to select the proper register or Flip Flop to read the operand from.