18. Superscalar and out-of-order execution
Issue multiple instructions per cycle while preserving correct program behavior. Work through dependency checking, register renaming, dynamic scheduling, reorder buffers, speculation, and precise exceptions.