modern computers are highly parallel devices, composed of components with very different performance characteristics. if an operation (such as a branch) cannot yet be performed because some earlier slow operation (such as a memory read) has not yet completed, a microprocessor may attempt to "predict" the result of the earlier operation and execute the later operation "speculatively", acting as if the prediction was correct. the prediction may be based on recent behavior of the system. when the earlier, slower operation completes, the microprocessor determines whether prediction was correct or incorrect. if it was correct then execution proceeds uninterrupted; if it was incorrect then the microprocessor rolls back the speculatively executed operations and repeats the original instruction with the real result of the slow operation.