Dynamic scheduling
Implies possibility of:
- Out of order issue (recall: we say that an instruction is issued once it has passed the ID stage) and hence out of order execution
- Out of order completion (also possible in static scheduling but less frequent)
- Imprecise exceptions (will take care of it later)
Example (different pipes for add/sub and divide)
R1 = R2/ R3 (long latency)
R2 = R1 + R5 (stall, no issue, because of RAW on R1)
R6 = R7 - R8 (can be issued, executed and completed before the other 2)