Введение

Блок оптимизации ЦП

Предварительное извлечение – это процесс получения кодов операций инструкций из памяти программы заранее, который осуществляется с помощью входной очереди предварительного извлечения (PIQ). Предварительно извлеченные инструкции хранятся в очереди. Заблаговременное получение кодов операций, до момента необходимости их выполнения, повышает общую эффективность процессора и увеличивает его скорость. Процессору больше не требуется ждать завершения операций доступа к памяти для получения кода следующей инструкции. Эта архитектура широко использовалась в микропроцессоре Intel 8086.

Введение

Трубопроводы вышли на передний план в проектировании архитектуры вычислительных систем в 1960-х годах из-за потребности в более быстрых и эффективных вычислениях. Трубопроводность – это более широкое понятие, и большинство современных процессоров загружают свои инструкции за несколько тактов до их выполнения. Это достигается предварительной загрузкой машинного кода из памяти в очередь предварительной выборки (prefetch input queue). Такое поведение применимо только к компьютерам архитектуры фон Неймана (то есть, не к компьютерам архитектуры Гарварда), которые могут выполнять самомодифицирующийся код и имеют конвейерную обработку инструкций. Почти все современные высокопроизводительные компьютеры удовлетворяют этим трем требованиям. Обычно поведение очереди предварительной выборки (PIQ) невидимо для программной модели процессора. Однако существуют ситуации, когда поведение PIQ становится видимым и должно учитываться программистом. Когда процессор x86 переключается между реальным и защищенным режимами, очередь PIQ должна быть очищена, иначе процессор продолжит интерпретировать машинный код, как если бы он был написан в предыдущем режиме. Если PIQ не очищается, процессор может неправильно интерпретировать код и сгенерировать исключение недопустимой инструкции. При выполнении самомодифицирующегося кода изменение кода процессора непосредственно перед текущей точкой выполнения может не повлиять на то, как процессор интерпретирует код, поскольку он уже загружен в PIQ. Процессор просто выполнит старую копию, уже находящуюся в PIQ, вместо новой, измененной версии кода в оперативной памяти и/или кэше. Это поведение PIQ можно использовать для определения, выполняется ли код внутри эмулятора или непосредственно на аппаратном обеспечении реального процессора. Большинство эмуляторов, вероятно, никогда не будут моделировать такое поведение. Если размер PIQ равен нулю (изменения в коде всегда немедленно влияют на состояние процессора), можно сделать вывод, что код выполняется в эмуляторе или процессор аннулирует PIQ при записи по адресам, загруженным в PIQ.

Очередь инструкций

Процессор выполняет программу, извлекая инструкции из памяти и выполняя их. Обычно скорость выполнения процессора значительно превышает скорость доступа к памяти. Инструкционная очередь используется для предварительной выборки следующих инструкций в отдельный буфер, пока процессор выполняет текущую инструкцию. При использовании четырехступенчатого конвейера скорость выполнения инструкций может быть увеличена в четыре раза по сравнению с последовательным выполнением. Процессор обычно имеет два отдельных устройства для выборки инструкций и для их выполнения. Реализация конвейерной архитектуры возможна только в том случае, если устройство интерфейса шины и устройство выполнения независимы. Пока устройство выполнения декодирует или выполняет инструкцию, не требующую использования шины данных и адреса, устройство интерфейса шины извлекает коды операций инструкций из памяти. Этот процесс значительно быстрее, чем отправка адреса, чтение кода операции, а затем его декодирование и выполнение. Предварительная выборка следующей инструкции во время декодирования или выполнения текущей инструкции называется конвейеризацией. Процессор 8086 имеет шестибайтовый конвейер предварительной выборки инструкций, в то время как 8088 – четырехбайтовый. Пока устройство выполнения выполняет текущую инструкцию, устройство интерфейса шины заранее считывает до шести (или четырех) байтов кодов операций из памяти. Длина очереди была выбрана на основе результатов моделирования. Исключение возникает, когда устройство выполнения встречает инструкцию перехода, то есть инструкцию безусловного или условного перехода (jump или call). В этом случае вся очередь должна быть очищена, и из памяти необходимо извлечь содержимое, на которое указывает указатель инструкции.

Недостатки

Процессоры, реализующие алгоритм предварительной выборки команд, достаточно сложны в техническом плане. Сложность разработки центрального процессора таких процессоров значительно выше, чем у обычных процессоров. Это в основном связано с необходимостью реализации двух отдельных блоков – БИУ и ЕС, работающих независимо друг от друга. По мере увеличения сложности этих чипов растет и их стоимость. Эти процессоры относительно дороже, чем их аналоги без очереди предварительной выборки. Однако эти недостатки в значительной степени компенсируются улучшением времени выполнения задач. После внедрения очереди предварительной выборки инструкций в процессор 8086, все последующие процессоры стали включать эту функцию.