Оптимизация для процессоров семейства Pentium: 13. Обзор конвеера PPro, PII и PIII — Архив WASM.RU

Все статьи

Оптимизация для процессоров семейства Pentium: 13. Обзор конвеера PPro, PII и PIII — Архив WASM.RU

Архитектура микропроцессоров PPro, PII и PIII хорошо объяснена и проиллюстрирована в различных руководствах от Интела. Рекомендуется, сначала изучить этот материал, чтобы понимать, как работают эти процессоры. Я коротко объясню его структуру с упором на те элементы, которые необходимы для оптимизирования кода.

Коды доставляются из кэша кода выравненными 16-ти байтными чанками в двойной буфер, в который умещается два таких чанка. Затем код поступает из двойного буфера в декодеры в виде блоков, названными мной блоками доставки инструкций (БДИ). Обычно длина БДИ 16 байт, но он может быть не выравнен. Цель двойного буфера - сделать возможным раскодировку инструкций, которые пересекают границу в 16 байт (например адрес, кратный 16).

БДИ поступает в декодер длины инструкции, который определяет, где начинается каждая из инструкций и где заканчивается, а затем попадает в декодеры инструкций. Есть три декодера, поэтому вы можете декодировать до трех инструкций за такт. Группа из трех инструкций, декодируемых за один и тот же такт, называется декодируемой группой.

Декодеры переводят инструкции в микрооперации (сокращенно "мопы"). Простые инструкции генерируют только один моп, в то время, как более сложные инструкции могут генерировать несколько мопов. Например, инструкция 'ADD EAX,[MEM]' декодируется в два мопа, один, считывающий исходный операнд из памяти, а другой, который выполняет сложение. Целью разбития инструкций на мопы является сделать обработку инструкций более эффективной.

Три декодера называются D0, D1 и D2. D0 может обрабатывать все инструкции, в то время как D1 и D2 может обрабатывать только простые инструкции, генерирующие только один моп.

Мопы из декодеров через короткую очередь поступают в таблицу распределения регистров (RAT). Выполнение мопов осуществляется на временных регистрах, после чего результат записывается в постоянные регистры EAX, EBX и так далее. Целью RAT является указание мопам, какие временные регистры использовать и позволить переименование регистров (смотри далее).

После RAT мопы поступают в буфер перегруппировки (ROB). Целью ROB является неупорядоченное выполнение. Мопы остаются в области рекреации (reservation station), пока не станут доступны операнды, которые им необходимы. Если операнд для уопа задерживается из-за того, что генерирующий его предыдущий моп еще не закончил свою работу, тогда ROB может найти дургой моп в очереди, чтобы сэкономить время.

Готовые к выполнению мопы посылаются в модули выполнения (execution units), которые сгруппированы вокруг пяти портов: порт 0 и 1 могут обрабатывать все арифметические операции, переходы и так далее. Порт 2 берет на себя операции считывания из памяти, порт 3 высчитывает адреса для записи в память, а порт 4 выполняет эту запись.

После того, как инструкция была выполнена, она помечается в ROB как готовая к удалению, после чего поступает в область удаления (retirement station). Здесь содержимое временных регистров, использованных мопами, записывается в постоянные регистры. Хотя мопы могут запускаться не по порядку, последний должен быть восстановлен при удалении.

2002-2013 (c) wasm.ru