В ЦП имеется препроцессор и постпроцессор. Когда команды выбираются из КЭШа или из ОЗУ, их необходимо декодировать и отправить на выполнение. Получение команды, её декодирование и её отправка на выполнение происходит на препроцессоре. А выполняются на постпроцессоре. И результат выполнения команды записывается в оперативную память.
Процесс, когда команды выбираются из памяти, декодируются во внутреннюю форму, выполняются и результат записывается в оперативную память и составляет основной четырехступенчатый конвейер. Может быть и основой 5-ступенчатый конвейер:
1) выборка команды
2) декодирование команды
3) выполнение команды
4) обращение к памяти
5) запоминание результата
И так можно сделать ступеней оч много
Каждую из этих ступеней команда должна проходить ровно за 1 такт, т.е. каждая ступень выполняет свою логику и пересылает команду на след.ступень ровно за 1 такт. Имеются сложные команды, которые проходят стадию выполнения за несколько тактов. Для согласования, при выполнении таких сложных инструкций задействуются еще дополнительные исполнительные конвейеры. Они добавляют ступени к основному конвейеру.
Но имеется и опасность длинных конвейеров.
Например: у процессора нет команд или данных для конвейера. Эти нужные такты называют конвейерными пузырьками. И эти пузырьки должны пройти все ступени до конца конвейера, а на это тоже тратится время. Т.е. попав в 20 ступень конвейера пузырек затратит 20 тактов для своего выхода.
Устройство обработки ветвлений. И предсказания ветвления.
Старые процессоры простаивали пока происходила оценка условия ветвления. Современные используют так называемые спекулятивные вычисления, т.е. происходит предсказание какая из ветвей выполнится далее и она начинает выполняться до того, как было оценено условие. Спекулятивные вычисления исп. для избежания появления пузырьков в конвейере. Но если предсказание неверное, а процессор уже начал спекулятивно выполнять все эти неверные инструкции, то потом их надо выгрузить из конвейера и загрузить нужные. Это тоже пузырьки, которые влияют на производительность.
Существует 2 вида предсказаний: статические и динамические.
M1 mov
….
Loop M1
Статические – просты и берут за основу предположение, что большинство обратных ветвлений происходит в повторяющихся циклах. Чаще всего цикл продолжается. И процессор будет повторно выполнять эти команды цикла. По этой причине статическое предсказание считает, что все обратные ветвления всегда выполняются. Если же ветвление указывает на блок кода, который сущ.дальше в программе, то статич. предсказание не выполняет такую ветвь. Если в программе много циклов, то статич. предсказание очень эффективно.
При динамическом предсказании исп.различные алгоритмы.
Алгоритм динамического предсказания ветвлений задействует 1 из таблиц: первая – для хранения истории предсказания ветвления, а вторая – для хранения адресов инструкций. Могут исп. и обе таблицы сразу.
В таблице записывается информация о результатах уже выполненных ветвлений.
В первой таблице хранятся все условные переходы, что встретились устройству(ветвления за несколько последних циклов). Также в ней хранятся биты, показывающие вероятность повторного выбора той же самой ветви. Когда препроцессор встречает инструкцию ветвления, уже содержащуюся в первой таблице, устройство предсказания ветвлений использует информацию этой таблицы для решения о выполнении спекулятивной команды.
А для того, чтобы вынести это решение, устройство должно знать точное местоположение кодов ??? по направлению ветвления. Это цель ветвления.
Эти цели хранятся во второй таблице. Цель берется и указывается препроцессору начать выборку команд по этому адресу.
Pentium использует 2 вида ветвления. Если же в первой таблице нет инструкции ветвления, то процессор будет использовать статическое предсказание, а если есть – то динамическое.
Кэш с отслеживанием.
Если взять кусок кода, повторно выполненный всего несколько раз, то потеря времени на выгрузку команды и её дешифрование небольшая, но если код исполняется тысячи раз и каждый раз производить выборку команды и её дешифрование – это большая потерял времени.
Кэш с отслеживанием принимает транслированные и декодированные команды, готовые к передаче на управление, формирует из них линии программы, называемые отслеживаниями, именно их, а не код х86 процессора выполняет Pentium.
Этот кэш работает в 2х режимах
1) исполнительный – кэш снабжает метку выполнения командами
2) режим построения отслеживающих сегментов – в этом режиме кэш с отслеживанием выбирает команды из КЭШа ???, транслирует их и создает отслеживаемые сегменты, которые помещаются в кэш с отслеживанием, и уже в исполнительном режиме они выполняются на процессоре.