Внеочередное исполнение

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Внеочередное исполнение (англ. Out-of-order execution) — парадигма, применяемая при разработке вычислительных устройств, с целью повышения производительности. Её особенность в том, что инструкции поступают в исполнительные модули не в порядке их следования, как было в концепции выполнения инструкций по порядку (англ. In-Order execution), а по готовности к выполнению. Среди широко известных машин впервые эта парадигма была в существенной мере реализована в машинах CDC 6600 фирмы Control Data и IBM 360/91 фирмы IBM.

Концепция[править | править вики-текст]

Выполнение инструкций по порядку ( In-order)[править | править вики-текст]

  1. Считывание инструкции
  2. Если все операнды инструкции доступны, то она передаётся на выполнение соответствующему исполнительному модулю, иначе процессор останавливается, ожидая готовности операндов.
  3. Инструкция выполняется в соответствующем модуле.
  4. Модуль записывает результат обратно в регистровый файл.

Выполнение не по порядку ( Out-of-order)[править | править вики-текст]

  1. Считывание инструкции
  2. Помещение инструкции в очередь
  3. Инструкция находится в очереди до тех пор пока её операнды не станут доступны. Таким образом инструкция может покинуть очередь прежде, чем попавшая туда раньше.
  4. Выбранная из очереди инструкция выполняется в соответствующем модуле.
  5. Результат помещается в очередь.
  6. Только после того, как все инструкции, которые были в очереди впереди данной, выполнятся, её результат помещается в регистровый файл.

Ключевая идея внеочередного выполнения заключается в возможности избежать простоя процессора в тех случаях, когда данные, необходимые для выполнения очередной инструкции, недоступны. Как можно видеть выше, процессор избегает простоев, которые возникают в пункте 2 для очередного выполнения инструкций в случае, когда инструкция не может быть выполнена из-за недоступности ее операндов.

Процессор с внеочередным выполнением кода выполняет те инструкции, которые готовы, вне зависимости от их порядка следования в коде программы. Инструкции выполняются не в порядке их следования в коде программы, а в порядке доступности данных в регистрах процессора. После выполнения процессор меняет порядок результатов выполнения инструкций так, чтобы создавалась видимость нормального, очередного выполнения.

Внеочередное выполнение тем эффективнее, чем длиннее конвейер процессора, и чем больше разница в скорости между памятью (оперативной или кэшем) и процессором. В современных компьютерах процессоры работают намного быстрее памяти, поэтому во время ожидания поступления данных процессор может выполнить множество инструкций, операнды которых доступны.

См. также[править | править вики-текст]

Литература[править | править вики-текст]