Внеочередное исполнение
Внеочередное исполнение (англ. out-of-order execution) машинных инструкций — исполнение машинных инструкций не в порядке следования в машинном коде (как было при выполнении инструкций по порядку (англ. in-order execution)), а в порядке готовности к выполнению. Реализуется с целью повышения производительности вычислительных устройств.
Среди широко известных машин впервые в существенной мере реализована в машинах CDC 6600 компании Control Data и IBM System/360 Model 91 компании IBM.
Описание и сравнение
[править | править код]Классическое поочерёдное выполнение
[править | править код]При выполнении инструкций по порядку (англ. in-order) осуществляются следующие действия:
- считывание инструкции;
- остановка процессора в ожидании для загрузки операндов инструкции;
- передача инструкции на выполнение соответствующему исполнительному модулю;
- выполнение инструкции соответствующим модулем;
- запись результата выполнения инструкции модулем в регистровую ячейку.
Внеочередное выполнение
[править | править код]При выполнении инструкций не по порядку (англ. out-of-order) осуществляются следующие действия:
- считывание инструкции;
- помещение инструкции в очередь I (называемую англ. instruction queue, instruction buffer или reservation stations);
- ожидание, пока операнды любой инструкции, находящейся в очереди I, станут доступны;
- передача инструкции, операнды которой доступны, на выполнение соответствующему исполнительному модулю;
- выполнение инструкции соответствующим модулем;
- запись результата выполнения инструкции модулем в очередь II;
- извлечение из очереди II результатов выполнения тех инструкций, перед которыми в очереди I не осталось невыполненных инструкций, и запись результатов в регистровый файл; удаление таких инструкций из очереди I.
Особенности и внутренняя работа
[править | править код]Особенности внеочередного исполнения:
- раньше других может быть выполнена инструкция, операнды которой будут готовы раньше операндов других инструкций;
- инструкция, поставленная в очередь I позже, может быть выполнена раньше;
- время простоя, вызванное ожиданием готовности операндов инструкций, уменьшается (по сравнению с процессором, выполняющим инструкции по порядку) за счёт ожидания готовности операндов нескольких инструкций;
- за счёт использования очереди II запись результатов в регистровый файл осуществляется в порядке следования инструкций в машинном коде (создаётся видимость выполнения инструкций по порядку).
Основная идея внеочередного выполнения заключается в возможности избежать простоя процессора в тех случаях, когда данные, необходимые для выполнения очередной инструкции, недоступны. Как можно видеть выше, процессор избегает простоев, которые возникают в пункте 2 для очередного выполнения инструкций в случае, когда инструкция не может быть выполнена из-за недоступности её операндов.
Процессор с внеочередным выполнением кода выполняет те инструкции, операнды которых готовы, вне зависимости от порядка следования инструкций в коде программы. Инструкции выполняются не в порядке их следования в коде программы, а в порядке доступности данных в регистрах процессора. С помощью очереди II процессор записывает результаты выполнения инструкций так, чтобы создавалась видимость нормального, очередного выполнения.
Оценка эффективности
[править | править код]Внеочередное выполнение тем эффективнее, чем длиннее конвейер процессора, и чем больше разница между скоростью работы памяти (оперативной или кэшем) и скоростью работы процессора. В современных[когда?] компьютерах процессоры работают намного быстрее памяти, поэтому во время ожидания поступления данных процессор может выполнить множество инструкций, операнды которых доступны.
См. также
[править | править код]Примечания
[править | править код]Литература
[править | править код]- David A. Patterson, John L. Hennessy. Computer Architecture: A Quantitative Approach, 5th Edition. — Morgan Kaufmann, 2011. — 856 p. — ISBN 012383872X. (англ.)
Ссылки
[править | править код]- Олег Бессонов, Обзор микроархитектур современных десктопных процессоров. Часть 2: внеочередное исполнение операций / Ixbt, 6 июля 2006
В другом языковом разделе есть более полная статья Out-of-order execution (англ.). |