50.7.1. МИКРООПЕРАЦИИ И КЭШИРОВАНИЕ КОДА




THIS SECTION IS UNDER CONSTRUCTION


Кэш инструкций

Обычные RISC процессоры все хорошо - инструкции фиксированной длинны и выполняются как правило за 1 такт - все хорошо.

В случае же CISC процессоров у нас сложная система комманд переменной длинны. Поэтому с целью минимизации времени работы code cache стал опускаться по конвееру ближе к выполняемым устройствам.


Кэш полудекодированных инструкций

Первая стадия была - сохранение в cache информации о границах инструкций Это позволило пробросить одну стадию конвеера.




Кэш микроопераций

Затем пришел out-of-order execution. Процессоры стали преобразовывать команды во инструкции для внутренного ядра (mOPS). Как правило декодоры были нескольких типов: для простых операций однозначно преобразуемых в микрооперации (типа ADD) и для сложных инструкций генерирующих последовательность микроопраций. Понятно что блок для сложных инструкций гораздо сложнее, поэтому их меньше. Пример блока декодирования для Intel Core:

Соответственно cache инструкций сместился еще дальше по конвееру и стал хранить уже mOPS.


Trace кэш

Дальнейшее развитие привело от mOPS-cache к Trace-cache, который уже содержал не микрооперации, а последовательности микроопераций которые не прерывались входящими/исходящими переходами (traces), и будучи запущенными выполнялись полностью, что повышало производительность.









Организация T-cache в сравнении с I-cache. Старшие биты адресса инструкции это Tag, младшие Set. (т.е. N-way associative)



Кроме того trace-cache может использоватся для развертки коротких циклов:


VLIW mOPS

Другой подход был использован в процессорах Transmeta Crusoe. Там использовался встроеенный в процессор Firmware компилятор, который преобразовывал входящие x86 комманды в native VLIW комманды процессора. Естественно code cache хранил именно эти комманды.

Форматы VLIW комманд Crusoe:








Index Prev Next