ABSTRACT

The pursuit of higher levels of instruction level parallelism is fundamentally limited by architectural dependences involving both control and data. To alleviate serialization due to dependences, prediction and speculation mechanisms can be employed. These two mechanisms are central to the various techniques discussed in this book. In all cases, the key idea is to predict certain unknown information required by the processor (e.g., the outcome of branch or arithmetic instructions, or the existence of a memory dependence between a store and a load), and allow the processor to use the predicted information as if it was correct. In this way, instructions that directly or indirectly consume this information can execute earlier, and execution time may be reduced. Speculative execution requires a recovery scheme to ensure the correctness in case of misspeculation.