Я читал некоторые материалы о суперскальдре и OoO, и я смущен. Я думаю, что их графики архитектуры выглядят одинаково.
Какова общая разница между выполнением Superscalar и OoO?
Ответ 1
Суперскалярные микропроцессоры могут выполнять две или более команды одновременно. Например. обычно у них есть как минимум 2 ALU (хотя суперскалярный процессор может иметь 1 ALU и некоторый другой исполнительный блок, например, блок переключения или перехода).
(Более точно, суперскалярные процессоры могут запускать два или более инструкций в одном цикле. Конвейерные процессоры могут выполнять более одной команды за раз, но не суперскалярный конвейерный процессор будет запускать только одну команду в любом заданном цикле Конвейерные исполнительные блоки выполняют несколько циклов для выполнения сквозных задач. Другими словами: суперскалярные процессоры обычно могут выполнять две команды без конвейера с задержкой одного цикла за цикл, тогда как не суперскалярные конвейерные процессоры не могут иметь две инструкции одного цикла при выполнении в ALU одновременно.)
Процессоры вне очереди могут выполнять инструкции из первоначального заказа. Например, в следующем, где MULTIPLY принимает 5 циклов, команда 3 может выполняться перед инструкцией 2 - поскольку команда 2 ожидает результат 5 циклов MULTIPLY инструкции 1:
1: MULTIPLY reg1 := reg2 * reg3
2: ADD reg4 := reg1 + 5
3: ADD reg6 := reg2 + 1
Большинство процессоров вне порядка также являются суперскалярными. Однако вы можете представить себе построение процессора вне порядка, который не является суперскалярным, который может инициировать только одну операцию на конвейерной ALU за цикл. (Я предлагаю такие операции, когда Intel использует чипы с низким энергопотреблением. Возможно, вы можете построить процессоры не по порядку, которые являются только скользящими скалярами, например, которые имеют только ALU 16 бит в ширину, принимая 2 цикла для 32-битная добавка и т.д. Но это растяжение.)
Многие суперскалярные процессоры, однако, не выходят из строя. В приведенном выше примере суперскаляр в порядке выполнения сначала выполнил команду [1]. Он НЕ запускает инструкцию 3, но будет ждать, пока начнется инструкция 2, - в это время она начнет команду 2 и 3 вместе.
Надеюсь, что это поможет.
Иногда вам нужно подумать о маловероятных предельных случаях, таких как 1-широко или полу-широкие машины ООО, чтобы понять концепции.