Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
jnxtn_Москаленко.docx
Скачиваний:
15
Добавлен:
01.04.2025
Размер:
439 Кб
Скачать
☆

2.3 Структура мпс

Микроархитектура процессора Pentium 4

На первый взгляд Pentium 4 кажется вполне традиционной CISC-машиной с большим и громоздким набором команд, поддерживающим 8-, 16- и 32-разрядные целочисленные операции, а также 32- и 64-разрядные операции с плавающей точкой. В нем всего 8 доступных регистров, причем ни один из них не повторяет другие. Допустимая длина команд составляет 1-17 байт.

На самом же деле процессор Pentium 4 основан на современном надежном RISC-ядре с развитой конвейеризацией. Его тактовая частота уже очень высока, а в последующие годы, скорее всего, вырастет еще больше. Удивительно, как инженерам Intel на основе архаичной архитектуры удалось построить процессор, отвечающий всем современным требованиям.

Обзор микроархитектуры NetBurst

Микроархитектура Pentium 4. называемая NetBurst. ознаменовала собой решительный отход от принципов микроархитсктуры Р6. использовавшейся в процессорах Pentium Pro, Pentium II и Pentium III. Она дает определенное представление о том, на какой базе продукция Intel будет разрабатываться в течение нескольких ближайших лет. Примерная схема микроархитектуры Pentium 4 изображена на рисунке6.

Рисунок 3. Микроархитектура Pentium 4


Pentium 4 состоит из четырех основных блоков: подсистемы памети, блока предварительной обработки, блока контроля исполнения с изменением после­довательности и блока исполнения. Рассмотрим эти блоки по порядку, начиная с верхнего левого и продвигаясь против часовой стрелки.

В состав подсистемы памяти входит объединенный кэш второго уровня (L2), а также логика доступа к внешнему ОЗУ по шине памяти. В первом поколении Pentium 4 объем L2 составлял 256 Кбайт; во втором — 512 Кбайт; в третьем — 1 Мбайт. L2 представляет собой 8-входовую ассоциативную кэш-память с 128-байтным строками. Если запрос к кэшу второго уровня не приносит результата, организуются две 64-байтных передачи в основную намять, посте чего из нес вы­бираются необходимые блоки. Данный кэш L2 относится к категории КЭШей с отложенной записью. Иными словами, новые данные в измененной строке записываются обратно в память лишь после сброса.

С кэшем тесно связан блок предварительной выборки (он не показан на рисунке), который пытается перенести данные из основной памяти в L2 еще до того, как эти данные запрошены. Из L2 данные могут на высокой скорости передаваться в другие блоки кэш-памяти. За один цикл может быть выполнена одна операция выборки из L2; так, на тактовой частоте 3 ГГц из L2 в другие кэши теоретически можно передать до 1,5 млрд 64-байтных блоков в секунду - таким образом, пропускная способность становится равной 96 Гбайт/с

Под изображенной на рисунке 5 подсистемой памяти находится блок предварительной обработки, который выбирает команды на L2 и декодирует их в порядке выполнения команд программы. Каждая команда на уровне ISA разбивается на последовательность RISC-подобных микроопераций. Для упрощения команд блок выборки-декодирования определяет, какие микрооперации необходимы для решения внутренних задач. В более сложных случаях производится поиск последовательности микроопераций в памяти микрокоманд. В любом случае команда уровня ISA процессора Pentium 4 преобразуется в последовательность микроопераций, подлежащих исполнению RISC-ядром микросхемы. Этот механизм позволяет «навести мосты» между устаревшим набором CISC-команд и современным трактом данных RISC.

Декодированные микрооперации отправляются в кэш трасс (trace cache), в роли которого выступает кэш команд первого уровня. Поскольку кэшируются на исходные команды, а декодированные микрооперации, необходимость в повторном декодировании при извлечении команды из кэша трасс отпадает. В этом заключается одно из наиболее существенных расхождений между микроархитектурами NetBurst и Р6 (в последней команды Pentium удерживались в кэше команд первого уровня). Здесь же выполняется прогнозирование ветвлений.

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

Как уже отмечалось, очередность запуска команд может не соответствовать предусмотренной в программе. В то же время требование архитектуры Pentium, касающееся точных прерываний, говорит о том, что ISA-команды должны возвращать результаты без отступления от заданной программой последовательности. За реализацию этого требования отвечает блок пересортировки.

В верхней правой части рисунка изображен блок исполнения, объединяющий специализированные блоки исполнения, которые непосредственно осуществляют целочисленные операции, операции с плавающей точкой и специализированные команды. Существует несколько блоков исполнения, работающих параллельно. Данные они получают из регистрового файла и кэша данных первого уровня.

Конвейер NetBurst

На рисунке6 приводится более подробная схема микроархитектуры NetBurst, в том числе ее конвейер. В верхней части схемы изображен блок предварительной обработки, ответственный за выборку команд из памяти и их подготовку к выполнению. Этот блок получает новые инструкции Pentium из кэша второго уровня порциями по 64 бит. Они декодируются в микрооперации и помешаются в кэш трасс. Емкость кэша трасс составляет 12 000 микроопераций, и по своей производительности он сопоставим с традиционным кэшем первого уровня на 8 или 16 Кбайт.

Рисунок 4 . Упрощенная схема тракта данных Pentium 4.

В кэше тpacc каждые шесть микроопераций объединяются в группу, занимающую одну строку Микрооперации из одной строки выполняются без нарушение последовательности, хотя они могут быть образованы из ISA команд Penium, отстоящих друг от друга на тысячи байтов. Для формирования более протяженных последовательностей микроопераций практикуется объединение трассируемых строк.

Если для выполнения ISA-команды Pentium требуется более четырех микроопераций, она не декодируется и не помещается в кэш трасс. Вместо этого она снабжается специальным маркером, заставляющим систему провести поиск микроопераций в памяти микрокоманд. Таким образом, логика исполнения с изменением последовательности получает микрооперации путем извлечения из кэша трасс ранее декодированных ISA-команд или оперативного поиска сложных ISA-команд (например, команды смешения строки) в памяти микрокоманд.

Встретившись с командой безусловного перехода, блок декодирования ищет предсказанный объект перехода в буфере объектов перехода (Branch Target Buffer, ВТВ) первого уровня и продолжает декодирование с соответствующего адреса. В кэше буфера объектов перехода первого уровня сохраняются 4000 последних переходов. Если необходимая команда перехода отсутствует в таблице, применяется статическое прогнозирование. При этом подразумевается, что обратный переход, во-первых, является частью цикла, во-вторых, не занят. Точность статического прогноза в этом случае очень высока. Прямой переход считается незанятым и входящим в структуру оператора if. Точность статического прогноза в случае прямых переходов значительно ниже, чем и случае обратных. Для прогнозирования микрооперации перехода применяется буфер трасс объектов перехода, или ВТВ трасс.

Второй компонент конвейера — логика исполнения с изменением последовательности — получает данные из кэша трасс емкостью 12 000 микрооперации. При поступлении из блока предварительной обработки каждой последующей микрооперации (а за цикл их поступает три) блок распределения и подмены регистрирует се в таблице, состоящей из 128 записей и называемой буфером переупорядовачивания команд (ReOrder Buffer, ROB). В этом буфере хранятся данные о состоянии микрооперации, вплоть до пересортировки ее результатов. Затем блок распределения и подмены проводит проверку на предмет доступности ресурсов, необходимых для выполнения микрооперации. Если ресурсы свободны, микрооперация устанавливается в одну из очередей на выполнение. Для микроопераций, исполняемых в памяти и вне памяти, предусмотрены отдельные очереди. Если выполнение микрооперации в данный момент невозможно, она откладывается, однако обработка последующих микроопераций продолжается; таким образом, микрооперации часто выполняются вне их исходной последовательности. Этот принцип позволяет поддерживать загрузку всех функциональных блоков на максимально высоком уровне. В каждый отдельно взятый момент могут одновременно обрабатываться до 126 команд, причем 48 из них могут загружаться из памяти, а 24 - сохраняться в памяти.

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

нет. Такие конфликты, как мы уже выяснили, называются WAR- и WAW-взаи-мозависимостями. Подмена целевого регистра позволяет записать результаты выполнения микрооперации в один из 120 временных (регистров, а значит, выполнить эту микрооперацию немедленно. Если же все временные регистры недоступны или микрооперация попадает в ситуацию RAW-взаимозависимости (обойти которую нельзя), планировщик указывает характер возникшей проблемы в виде записи в буфере ROB. Впоследствии, после освобождения всех необходимых ресурсов, микрооперация устанавливается в одну из очередей на выполнение.

Блок распределения и подмены помещает готовые к выполнению операции в одну из двух очередей. Четыре планировщика ответственны за извлечение микрокоманд из очередей. Каждый планировщик регламентирует обращения к тем или иным ресурсам:

1. Планировщик 1 - АЛУ 1 и блок смещения операций с плавающей точкой.

2. Планировщик 2 - АЛУ 2 и блок исполнения операций с плавающей точкой.

3. Планировщик 3 - команды загрузки.

4. Планировщик 4 - команды сохранения.

Поскольку планировщики и АЛУ работают на скорости, вдвое превышающей номинальную тактовую частоту, первые два планировщика могут передавать но две микрооперации за цикл. Учитывая то, что два целочисленных АЛУ тоже работают на удвоенной скорости, процессор Pentium 4 с тактовой частотой 3 ГГц способен выполнять 12 млрд целочисленных операций в секунду. В силу столь высокой скорости блок контроля исполнения с изменением последовательности испытывает некоторые трудности с загрузкой АЛУ. Команды загрузки и сохранения проходят через один блок исполнения, работающий на удвоенной частоте, который в течение одного цикла может вызывать по одной команде обоих типов. Таким образом, в лучшем случае (при отсутствии операций с плавающей точкой) за цикл может' быть вызвано 6 целочисленных микроопераций.

Два целочисленных АЛУ неодинаковы. АЛУ 1 выполняет любые арифметические и логические операции и переходы. АЛУ 2 способно выполнять только команды сложения, вычитания, сдвига и циклического сдвига. Не идентичны и два блока исполнения операций с плавающей точкой. Первый из них выполняет только сдвиги и SSE-команды. Второй поддерживает арифметические операции с плавающей точкой, а также ММХ- и SSE-команды.

АЛУ и блоки исполнения операций с плавающей точкой получают данные от двух регистровых файлов емкостью по 128 записей. Один из этих файлов отводится для целых чисел, другой — для чисел с плавающей точкой. В них содержатся все опранды, необходимые для исполнения команд; кроме того, они играют роль хранилища результатов. В силу подмены регистров восемь из них содержат регистры, доступные на уровне архитектуры команд (ЕАХ. ЕВХ. ЕСХ. EDX и т. д.), однако расположение «реальных» значений в каждом конкретном случае зависит от изменений в отображении, происходящих в ходе выполнения.

Кэш данных первого уровня является одним из компонентов высокоскоростной (2х) схемы. При емкости 8 Кбайт в нем хранятся целые числа, числа с плавающей точкой и другие типы данных. В отличие от кэша трасс, эти данные никоим образом не декодируются. Функция кэша данных сводится к хранению копий байтов, находящихся в памяти. Что касается его характеристик, то кэш данных первого уровня представляет собой 4-входовую ассоциативную кэш-память с емкостью строки 64 байт. Он поддерживает сквозную запись; иными словами, при изменении строки кэша она незамедлительно копируется обратно в кэш второго уровня. В течение никла кэш данных первого уровня обрабатывает по одной операции чтения и записи. Пели затребованное слово не удается обнаружить в кэше первого уровня, отправляется запрос в кэш второго уровня; по* следний в такой ситуации может ответить либо сразу, либо после выборки соответствующей строки из памяти. В любой момент и состоянии исполнения могут находиться до четырех запросов, направленных из кэша первого уровня в кэшвторого уровня.

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

Команды процессора Pentium 4

Команды Pentium 4 представляют собой причудливую смесь 32-разрядных команд, а также команд, появившихся еще в процессоре 8088. В таблице1 приве­дены наиболее распространенные целочисленные команды, при этом использу­ются следующие обозначения:

SRC - источник данных;

DST - приемник данных:

#-количество битов, из которое происходит сдвиг;

LV - количество локальных переменных.

Перечень далеко не полный, поскольку в него не вошли команды с плаваю­щей точкой, команды управления, а также некоторые нечасто встречающиеся це­лочисленные команды (например, использование 8-разрядного байта для выпол­нения поиска по таблице). Тем не менее таблица дает представление о том, какие действия может выполнять Pentium 4.

Многие команды Pentium 4 обращаются к одному или к двум операндам, ко­торые находятся в регистрах или памяти. Например, бинарная команда ADD складывает два операнда, а унарная команда INC увеличивает значение одного операнда на 1. Некоторые команды имеют несколько похожих вариантов. На­пример, команды сдвига могут сдвигать слово либо вправо, либо влево, с уче­том знакового бита или без учета. Большинство команд имеют несколько раз­личных колировок в зависимости от природы операндов.

Таблица 1.1

Команда

Описание

Команды перемещения

MOV DST. SRC

Перемещение из SRC в DST

PUSH SRC

Помещение из SRC в стек

POP DST

Выталкивание слова из стека и помещение его в DST

XCHG DS1.DS2

Смена мест DS1 и DS2

LEA DST. SRC

Загрузка действительного адреса SRC в DST

CMOV DST. SRC

Условное перемещение

Арифметические команды

ADD DST, SRC

Сложение SRC и DST

SUB DST. SRC

Вычитание SRC из DST

MUL SRC

Умножение ЕАХ на SRC (без учета знака)

IMUL SRC

Умножение ЕАХ на SRC (с учетом знака)

DJV SRC

Деление EDX:EAX на SRC (без учета знака)

IDV SRC

Деление EDX:EAX на SRC (с учетом знака)

ADC DST. SRC

Сложение SRC с DST и прибавление бита переноса

S88 DST. SRC

Вычитание DST и перенос из SRC

INC DST

Инкремент (прибавление 1) DST

DEC DST

Декремент (вычитание 1) DST

NEG DST

Отрицание DST (вычитание DST из 0)

Двоично-десятичные команды

DAA

Десятичная коррекция

AAA

Коррекция ASCII-кода для сложения

AAS

Коррекция ASCII-кода для вычитания

AAM

Коррекция ASCII-кода для умножения

AAD

Коррекция ASCII-кода для деления

Логические команды

AND DST, SRC

Логическая операция И над SRC и DST

OR DST. SRC

Логическая операция ИЛИ над SRC и DST

XOR DST. SRC

Логическая операция ИСКЛЮЧАЮЩЕЕ ИЛИ над SRC и DST

NOT DST

Замещение DST дополнением до 1

Команды обычного и цикличесхого сдвига

SAL/SAR DST. #

Сдвиг DST влево/вправо на * бит

SHL/SHR DST. #

Логический сдвиг OST влево/вправо на я бит

ROL/ROR OST, *

Циклический сдвиг DST влево/вправо на # бит

ROL/ROR OST. ш

Циклический сдвиг OST по переносу на * бит

Команды тестирования и сравнения

TSTSRC1.SRC2

Операнды логической операции И. установка флагов

CMP SRC1.SRC2

Установка флагов на основе разности SRC1 - SRC2

Команды передачи управления

JMP ADDR

Переход к адресу

Jxx ADDR

Условные перекоды на основе флагов

CALL ADDR

Вызов процедуры по адресу

RET

Выход из процедуры

IRET

Выход из прерывания

LOOPkx

продолжение цикла до выполнения определенного условия

INT ADDR

Программное прерывание

INTO

Прерывание, если установлен бит переполнения

Команды обработки стокрок

LOOS

Загрузка строки

STOS

Сохранение строки

MOVS

Перемещение строки

CMPS

Сравнение двух строк

SCAS

Сканирование строки

Команды для работы с /содами условий

STC

Установка бита переноса в регистре EFLAGS

CLC

Сброс бита переноса в регистре EFLAGS

CMC

Дополнение бита переноса в регистре EFLAGS

STD

Установка бита направления в регистре EFLAGS

CLO

Сброс бита направления в регистре EFLAGS

STN

Установка бита прерывания в регистре EFLAGS

CLI

Сброс бита прерывания в регистре EFLAGS

PUSHFD

Помещение значения из регистра EFLAGS в стек

POPFD

Выталкивание значения из стека в регистр EFLAGS

LAHF

Загрузка АН из регистра EFLAGS

SAHF

Сохранение АН в регистре EFLAGS

Прочие команды

SWAP DST

Изменение порядка следования байтов в DST

CWQ

Расширение ЕАХ до EDX:EAX для деления

SWDE

Расширение 16-разрядного числа в АХ до ЕАХ

ENTER SIZE. LV

Создание стекового фрейма с байтами размера

LEAVE

Удаление стекового фрейма, созданного командой ENTER

NOP

Пустая операция

HLT

Останов

IN AL, PORT

Перенос байта из порта в АЛУ

OUT PORT, AL

Перенос байта из АЛУ в порт

WAIT

Ожидание прерывания

При выполнении команд источники данных (SRC) не изменяются, а прием­ники (DST) обычно изменяются. Существуют определенные правила, опреде­ляющие, что может быть источником, а что приемником, но здесь мы не будем о них говорить. Многие команды имеют три варианта: для 8-, 16- и 32-разрядных операндов соответственно. Они различаются по коду операции и/или по одному биту в команде. В таблице1. приведены в основном 32-разрядные команды.

Для удобства команды разделены на несколько групп. Первая группа со­держит команды, которые перемещают данные между компонентами машины: регистрами, памятью и стеком. Вторая группа содержит арифметические коман­ды для операций со знаком и без знака. При умножении и делении 64-разрядное произведение или делимое хранится в двух регистрах: ЕАХ (младшие биты) и EDX (старшие биты).

Третья группа включает двоично-десятичную арифметику. Здесь каждый байт рассматривается как два 4-разрядных полубайта. Каждый полубайт содер­жит 1 десятичный разряд (от 0 до 9). Комбинации битов от 1010 до 1111 не ис­пользуются. Таким образом, 16-разрядное целое число может содержать деся­тичное число от 0 до 9999. Хотя такая форма хранения неэффективна, она устраняет необходимость преобразования десятичных входных данных в двоич­ные, а затем обратно в десятичные для вывода. Эти команды служат для выпол­нения арифметических действий нал двоично-десятичными числами. Они широ­ко используются в программах на языке COBOL

Логические команды и команды сдвига манипулируют битами в слове или байте. Существует несколько комбинаций.

Следующие две группы связаны с проверкой, сравнением и осуществлением перехода в зависимости от полученного результата. Результаты проверки и срав­нения хранятся в различных битах регистра EFLAGS. Символами Jхх обозначе­на группа команд, выполняющих условный переход в зависимости от результа­тов предыдущего сравнения (то есть в зависимости от битов в регистре EFLAGS).

В Pentium 4 есть несколько команд для загрузки, сохранения, перемещения, сравнения и сканирования символьных строк или слов. Перед этими командами может стоять специальный префиксный байт REP (repetition — повторение), ко­торый заставляет команду повторяться до тех пор. пока не будет выполнено оп­ределенное условие (например, пока регистр ЕСХ. значение которого уменьша­ется на 1 после каждого повторения, не станет равным 0). Таким образом. различные действия (перемещение, сравнение и г.д.) могут производиться над произвольными блоками данных. Следующая группа команд управляет кодами условий.

В последнюю группу входят команды, которые не вошли ни в одну из преды­дущих групп. Это команды перекодирования, управления, ввода-вывода и оста­новки процессора.

Команды Pentium 4 имеют ряд префиксов. Один из них (REP) мы уже упомя­нули. Префикс - это специальный байт, который может ставиться практически перед любой командой (подобно WIDE в IJVM). Как уже отмечалось, префикс REP заставляет команду, идущую за ним, повторяться до тех пор, пока регистр ЕСХ не примет значение 0. Префиксы REP2 и REPHZ заставляют команду выполняться

снова и снова, пока код выполнения условия Z не примет значение 1 или 0 соот­ветственно. Префикс LOCK резервирует шину для всей команды, чтобы можно бы­ло осуществлять межпроцессорную синхронизацию. Другие префиксы используются для того, чтобы команда работала и 16 или 32 разрядном формате При этом меняется не только длима операндов, но и полностью переопределяются ре­жимы адресации. Наконец, в Pentium 4 реализована сложная схема сегментации, в которой задействованы код, данные, стек и дополнительные сегменты (насле­дие 8088). Префиксы позволяют регламентировать применение тех или иных сегментов при обращении к памяти.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]