и в разных стадиях несколько вещей могут выполняться параллельно
in-order более эффективны с точки зрения потребляемой энергии (обычно), меньше по площади и проще делать
например мы встретили загрузку из памяти - она долгая
и пока она не закончится мы ничего выполнять не можем, конвеер загружен
Это совсем не то что думают программисты
фактические последние лет 20 индустрия пыталась сделать более умный процессор который сможет оптимизировать код на лету
например у нас есть код делающий:
R1 = Load A
R2 = Load B
R3 = R1 + R2
и потом идет другое:
R1 = 1
R2 = 1
R3 = R1 + R2
R1 = Load A
R2 = Load B
R3 = R1 + R2
и потом идет другое:
R1 = 1
R2 = 1
R3 = R1 + R2
но out-of-order на это посмотрит и скажет что "а ваще давайте переназначим регистры и сделаем все параллельно)
но возврат данных будет в том порядке как ожидает программа
В высокопроизводильном - все обычно ОоО
Изобрели это ооооочень давно для System/360 Model 91
это иногда называют "динамическое выполнение" (Dynamic Execution)