logo
Дубинин Н

5. Архитектура процессоров семейства p6

Процессоры семейства P6 представляют собой реализацию наиболее современных процессоров в семействе IA: PentiumPro,PentiumII,Celeron,PentiumIII. В проектировании процессоров семейства P6 одной из главных задач было значительное увеличение производительности процессоров Pentium благодаря улучшению архитектуры. Принципиальное отличие этого семейства состоит в том, что P6 преобразует команды x86 во внутренние RISC-подобные команды, называемые микрокомандами (micro-ops). Микрокод – это элементарная инструкция, которая выполняется одним из шести блоков процессора параллельно. Это позволяет устранить многие ограничения, свойственные набору команд x86, такие как нерегулярность кодирования команд, операции целочисленных пересылок «регистр – память» и переменная длина непосредственных операндов. Процессоры семейства P6 имеют трехходовую суперскалярную конвейерную архитектуру. Термин “трехходовая суперскалярная” означает, что, используя технику параллельной обработки, процессор может в среднем за один такт декодировать, диспетчеризировать и выполнить три команды. На рис. 2.11 показан обобщенный вид конвейера.

Рис 2.11. Функциональная схема процессора типа P6

Для постоянного поступления команд и данных конвейер процессора P6 включает два уровня кэша. Кэш L1 состоит из кэша команд и кэша данных, каждый емкостью по 8 и более Кб, они вплотную присоединены к конвейеру. Кэш L2 может быть 256 Кб и более. Это статическое ОЗУ, которое присоединено к ядру процессора через 64-битную шину кэша.

Центральная часть архитектуры семейства процессоров P6 это введение механизма “динамического выполнения”. Динамическое выполнение включает 3 концепции обработки информации:

- глубокое прогнозирование ветвлений;

- динамический анализ потока данных;

- прогностическое выполнение.

Прогнозирование ветвлений – это концепция, которая позволяет процессору с опережением декодировать команды ветвлений для полного использования конвейеров. В семействе процессоров P6 блок выборки/декодирования команд использует оптимизированный алгоритм прогнозирования ветвлений для предсказания направления потока команд в многоуровневом ветвлении, вызовах процедур и возвратах из них.

В семействе процессоров P6 блок диспетчеризации/выполнения команд может одновременно следить за многими командами и выполнять их в порядке, который оптимизирует множественное выполнение до тех пор, пока сохраняется целостность данных. Такой режим держит занятым блок выполнения команд даже тогда, когда происходит кэш-промах, и при зависимости данных в командах.

Прогностическое выполнение – это возможность процессора выполнять команды впереди счетчика команд, но фиксировать результаты в порядке поступления команд. Для обеспечения возможности прогностического выполнения в микроархитектуре семейства процессоров P6 разделяется диспетчеризация и выполнение команд. Процессорные блоки диспетчеризации/выполнения используют анализ потока данных для выполнения всех доступных команд в накопителе команд и временно сохраняют результаты в буферных регистрах. Блок сброса ищет в накопителе команд выполненные команды, в которых нет зависимостей данных с другими командами или неразрешенных ветвлений. Когда завершенные команды найдены, блок сброса фиксирует результаты этих команд в памяти или в регистрах в порядке их поступления и удаляет эти команды из накопителя команд. На рис. 2.12 показана более подробная функциональная схема архитектуры семейства процессоров P6, которая включает следующие подсистемы обработки:

- подсистема памяти;

- устройство выборки/декодирования;

- накопитель команд (буфер переупорядочивания);

- устройство диспетчеризации/выполнения;

- блок сброса.

Подсистема памяти для семейства процессоров P6 состоит из основного ОЗУ, первичного кэша (L1) и вторичного кэша (L2). Блок интерфейса шины обращается к системе памяти через внешнюю системную шину разрядностью 64 бит. Эта шина работает на основе транзакций – каждая операция доступа к шине обрабатывается как отдельная операция запроса и ответа. Пока шинный интерфейс ожидает ответ на запрос к шине, он может выполнить множество дополнительных запросов. Например, обращаться к кэшу L2 через 64‑битную (в последних моделях – 256-битную) шину кэша.

Блок интерфейса шин обращается к вторичному кэшу по отдельной 64-битной шине, также ориентированной на транзакции. Эта шина способна обслуживать до четырех одновременных запросов. Тактовая частота шины кэша, в зависимости от модели процессора, равна частоте ядра или ее половине.

Доступ к первичному кэшу идет по внутренней шине, работающей на частоте ядра. Четырехканальный наборно-ассоциативный первичный кэш инструкций имеет размер 8 Кб. Двухканальный наборно-ассоциативный первичный кэш данных (тоже 8 Кб) является двухпортовым – за один такт он может одновременно выполнить 1 запись и 1 чтение. Обмен кэша и памяти поддерживается протоколом MESI, который позволяет работать и в мультипроцессорных конфигурациях. Запросы к памяти от исполнительных блоков процессора проходят через блок интерфейса памяти и блок переупорядочивания запросов к памяти. Эти блоки предназначены для выравнивания потоков запросов к памяти через кэш и предотвращают блокировку (заторы) запросов. Первичный кэш свои промахи автоматически направляет к вторичному, а если промах произойдет и во вторичном кэше, то запрос через системную шину выйдет уже на основную память. Запросы к основной памяти и вторичному кэшу проходят через блок переупорядочивания запросов к памяти, который выступает в роли планировщика и диспетчера. В его ведении находятся все запросы к памяти, и он может менять порядок их исполнения для предотвращения блокировок и повышения производительности. Он может выполнять и спекулятивные чтения (но не записи).

Устройство выборки/декодирования включает блок выборки команд, буфер возможных переходов, декодер команд, последовательность микрокода и таблицу псевдонимов регистров.

Устройство диспетчеризации/выполнения содержит буфер резервации, 2 АЛУ, 1 блок с плавающей точкой x87, 2 блока генерации адреса и 2 SIMD-блока с плавающей точкой.

Накопитель команд имеет массив регистров переупорядочивания.

Блок сброса фиксирует результат прогностического выполнения микрокода в постоянное машинное состояние и удаляет микрокод из буфера переупорядочивания. Как и буфер резервации, блок сброса непрерывно проверяет состояние микрокода в буфере переупорядочивания – ищет те операции, которые были выполнены и у которых нет никаких зависимостей с другими микрооперациями в накопителе команд. Затем он “сбрасывает” завершенные микрооперации в их оригинальном порядке, принимая во внимание прерывания, исключения и промахи в прогнозировании перехода.

Суперконвейеризация в семействе P6 делит ступени стандартного конвейера на более мелкие части. Очевидно, что с увеличением числа ступеней каждая отдельная ступень выполняет меньшую работу и, следовательно, содержит меньше аппаратной логики в каждой схеме.

Временной интервал между поступлением набора входных воздействий на входы схемы и появлением результирующих сигналов на ее выходах (задержка распространения) в результате становится существенно меньше. Благодаря более коротким задержкам распространения сигнала в каждой отдельно взятой ступени конвейера становится возможным существенное повышение тактовой частоты.

Рассмотрим поэтапную работу конвейера процессора P6, состоящего из 10 стадий, представленных в табл. 2.3. Конвейер можно разделить на 3 самостоятельных функциональных части: входной блок упорядоченной обработки, отвечающий за декодирование и обработку команд; ядро исполнения с изменением последовательности, где, собственно, и происходит выполнение команд, и конвейер упорядоченного вывода команд из последовательности. Блок выборки команды IFUсчитывает поток инструкций из L1 кэша команд строками по 32 байта за такт. Для поиска начального адреса команды используется текущий указатель команды IP. По этому адресу извлеченные и выровненные до 16 байт команды передаются на три дешифратора. Если команда находится в конце первой строки кэша, считывается вторая строка кэша. Указатель команды управляется блоком вычисления адреса командыBACс помощью информации, полученной от буфера адреса перехода BTB, учитывающей предысторию ветвлений.

Таблица 2.3