Operand forwarding
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+CSUB 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.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
Fetch ADD | Decode ADD | Read Operands ADD | Execute ADD | Write result | |||
Fetch SUB | Decode SUB | stall | stall | Read Operands SUB | Execute SUB | Write result |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
Fetch ADD | Decode ADD | Read Operands ADD | Execute ADD | Write result | ||
Fetch SUB | Decode SUB | stall | Read Operands SUB: use result from previous operation | Execute SUB | Write result |