out-of-order execution
Running instructions as soon as their inputs are ready rather than strictly in program order, while still making the results appear in program order.
Out-of-order execution issues instructions from a window to execution units in dataflow order (when operands and a unit are ready), constrained only by true dependences, and retires them in program order through a reorder buffer.