ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.12.2021
Просмотров: 389
Скачиваний: 2
Суперскалярные процессоры 4 6 3
ния выделяется один из свободных в данный момент физических регистров АРФ
(Rj). Во всех последующих командах, где в качестве логического регистра операнда
упоминается Ri, ссылка на него заменяется ссылкой на физический регистр Rj. Та-
ким образом, различные команды, где указан один и тот же логический регистр,
могут обращаться к различным физическим регистрам.
Номера логических регистров динамически отображаются на номера физичес-
ких регистров посредством
таблиц подстановки
(lookup table), которые обновля-
ются после декодирования каждой команды. Очередной результат записывается
в новый физический регистр, но значение каждого логического регистра запоми-
нается, благодаря чему легко восстанавливается в случае, если выполнение команды
должно быть прервано из-за возникновения исключительной ситуации или непра-
вильного предсказания направления условного перехода.
Переименование регистров может быть реализовано и по-другому — с помощью
буфера переименования.
Проиллюстрируем этот способ, вернувшись к ранее при-
веденной последовательности из трех команд. Схема содержит аппаратный регис-
тровый файл (АРФ) на
М
регистров и буфер переименования (БП) на N входов
(рис. 9.49). Будем считать, что число логических регистров также равно
М,
то есть
в качестве временных регистров переименования используются только ячейки БП.
Рис. 9.49. Аппаратный регистровый файл и буфер переименования
Каждому регистру АРФ придан бит «Значение достоверно» (ЗД). Единичное
значение ЗД свидетельствует о том, что в регистре содержится корректное значе-
ние, которое может быть взято в качестве операнда команды.
Буфер переименования представляет собой ассоциативное запоминающее уст-
ройство или набор регистров с ассоциативным доступом. Каждая ячейка или ре-
гистр БП идентифицируется своим порядковым номером (0, 1,.,.,
N
- 1). Инфор-
мация, хранящаяся в ячейке или регистре БП (в каждом входе), представляется
пятью полями:
-
Вход занят(ВЗ)
. Однобитовое поле, единичное значение которого говорит о том,
что этот вход БП недоступен.
-
Номер переименованного регистра (Рг)
. В поле содержится номер логического
регистра АРФ, для временной замены которого выделена данная ячейка БП.
-
Значение
. В поле хранится текущее содержимое регистра, указанного в по-
ле Рг.
4 6 4 Глава 9. Основные направления в архитектуре процессоров
- Значение достоверно (ЗД).
Однобитовое поле, единичное значение которого
подтверждает достоверность содержимого поля «Значение» (если значение еще
не вычислено, то
ЗД
= 0).
-
Последнее переименование (П П
). Если в БП несколько ячеек через поле Рг ссы-
лаются на один и тот же регистр, единица в однобитовом поле ПП будет только
у той ячейки, где находится последняя ссылка на данный регистр.
Предположим, что в исходный момент (рис. 9.50,
а)
в буфере переименования
заполнены три первых входа, то есть имеем единицы в их поле ВЗ. Текущее состо-
яние БП свидетельствует о том, что в предшествующих командах для записи ре-
зультатов использовались регистры R4, R0 и Rl, и хотя результаты этих команд уже
получены (в поле ЗД записана единица), вычисленные значения еще не переписа-
ны в соответствующие регистры АРФ.
Поле ПП введено из-за того, что регистры могут переименовываться многократно.
На рис. 9.50,
6
показан случай последовательного переименования регистра R1
Единица в поле ПП входа 3 указывает, что последнему переименованию регистра
R1 соответствует именно данный вход. У всех остальных входов, ссылающихся на
«устаревшие» значения R1, в этом поле будет 0. Если очередной команде требуется
значение из регистра Rl, то из двух возможных чисел 10 и 15 будет взято 15, то есть
значение того входа, где в поле ПП содержится единица.
Всякий раз, когда встречается команда, предполагающая запись результата в ре-
гистр, необходимо в буфере переименования выделить для этого регистра один из
свободных входов (свободную ячейку) и правильно инициализировать его поля.
Обычно буфер заполняется циклически, для чего имеются указатели первого
и последнего свободного входов. Когда запрашивается очередной свободный вход,
используется указатель «головы», и затем значение этого указателя соответствую-
щим образом изменяется. Когда какой-то из входов освобождается, то корректи-
руется значение указателя «хвоста». После выделения входа для регистра резуль-
тата производится инициализация его полей: устанавливаются в единицу поля ВД
и ПП, в поле Рг заносится номер регистра, а в поле ЗД помещается 0, означающий,
что поле «Значение» еще не содержит достоверного значения. Рисунок 9.50,
в
ил-
люстрирует состояние буфера переименования после выделения входа для регис-
тра R2 в команде MUL.
Теперь рассмотрим, каким образом из буфера извлекаются значения операн-
дов (поиск операндов в БП производится, если они отсутствуют в АРФ). В нашем
примере это соответствует выборке операндов для команды MUL (значений реги-
стров R0 и R1). Так как рассматриваемый буфер ассоциативный, то для получения
значений операндов нужно произвести ассоциативный поиск последних значений
регистров R0 и R1, то есть тех входов, где в поле Рг указаны искомые регистры, а в
поле ПП содержится 1 (рис. 9.50,
г).
Если передаваемой далее команде требуется значение регистра, которое еще не
вычислено (недостоверно), вместо значения выдается идентификатор (номер) со-
ответствующего входа буфера и ставится пометка, что это не значение, а номер
входа. Рисунок 9.50, д показывает такую ситуацию для команды ADD. Первое, что
делается при переименовании этой команды, — выделение свободного входа для ре-
гистра R3, конкретно — входа 4. Далее должны быть извлечены значения регистров
Суперскалярные процессоры 4 6 5
Рис, 9,50, Иллюстрация процессов в буфере переименования
4 6 6 Глава 9. Основные направления в архитектуре процессоров
R1 и R2. Поскольку последнее переименование регистра R1 достоверно, выборка
содержащегося в регистре значения может быть произведена так, как это было
описано выше. Однако значение R2 еще не вычислено, поэтому вместо него в ис-
полнительную часть процессора, где будет выполняться команда ADD, пересыла-
ется номер соответствующего-входа буфера переименования (в нашем примере
это 3).
Теперь в буфере переименования имеется несколько входов, ссылающихся на
один и тот же регистр. Так, на рис. 9.50,
е
показана ситуация, когда команда SUB
выдана до завершения команды MUL. В этом случае под регистр R2 выделен еще
один вход (вход 5), в котором установлены соответствующие значения в полях ЗД
и ПП. Одновременно содержимое поля ПП входа 3, где хранилось предыдущее опи-
сание регистра R2, изменено на 0. Таким образом, с данного момента все последую-
щие команды, ссылающиеся на регистр R2 как источник операнда, будут переад-
ресовываться на вход 5. Это будет продолжаться до появления новой команды,
с регистром результата R2.
По завершении команды регистр результата должен быть модифицирован так,
чтобы последующие команды могли получить доступ к вычисленному результату.
Модификация базируется на идентификаторе входа буфера переименования, вы-
деленного для запрошенного регистра результата. В нашем примере предположим,
что завершилась команда MUL и результат 0 должен быть занесен во вход 3 (рису-
нок
9.50, ж),
В поле ЗП этого входа помещается единица, показывающая, что зна-
чение регистра R2 уже доступно.
Последний момент — это освобождение входа буфера переименования (рису-
нок 9.50, з). Критерий освобождения входа будет рассмотрен позже.
Переупорядочивание команд
После декодирования команд и переименования регистров команды передаются
на исполнение. Как уже отмечалось, выдача команд в функциональные блоки мо-
жет производиться неупорядоченно, по мере готовности. Поскольку порядок вы-
полнения команд может отличаться от предписанного программой, необходимо
обеспечить корректность их операндов (частично решается путем переименова-
ния регистров) и правильную последовательность занесения результатов в регис-
тры АРФ. Одним из наиболее распространенных приемов решения этих проблем
служит
переупорядочивание команд.
В его основе лежат использование
окна ко-
манд —
буферной памяти, куда помещаются все команды, прошедшие декодиро-
вание, и переименование регистров (последняя операция выполняется только
с теми командами, которые записывают свой результат в регистры). Окно команд
обеспечивает отсрочку передачи команд на исполнение до момента готовности опе-
рандов, а также нужную очередность завершения команд и загрузки их результа-
тов в регистры АРФ. Эта техника известна также под названием
шелвинг
(shelving).
Ниже рассматриваются два варианта окна команд — централизованное и распре-
деленное.
Централизованное окно команд.
Данное окно реализуется в виде так называе-
мого
табло
(Scoreboard). Техника табло впервые была предложена в 1964 году
фирмой Cray и реализована в ЭВМ CDC 6600.
Суперскалярные процессоры 4 6 7
Табло (иногда слово Scoreboard переводят как табельная доска) представляет
собой буферное запоминающее устройство, в котором хранится некоторое коли-
чество последних извлеченных из памяти и декодированных команд, а также теку-
щая информация о доступности ресурсов, привлекаемых для их исполнения. Функ-
циями табло являются оперативное выявление команд, для исполнения которых
уже доступны все необходимые операнды и ресурсы, и выдача таких команд на
исполнение в соответствующие функциональные блоки. Табло можно рассматри-
вать как систему предварительной диспетчеризации команд, однако оно осуще-
ствляет контроль выполнения команд и после их выдачи.
Все извлеченные из памяти команды сразу же после их декодирования и, если
это необходимо, переименования регистров заносятся в табло, причем с соблюде-
нием порядка их следования в программе. Физически табло реализуется на основе
ассоциативной памяти. Каждой команде выделяется одна ячейка, состоящая из
нескольких полей:
- поля операции, где хранится дешифрированный код операции;
-двух полей операндов, размещающих значения операндов, если они известны,
либо информацию о том, откуда эти операнды должны быть получены;
- поля результата, указывающего регистру, куда должен быть помещен резуль-
тат выполнения данной команды;
-
поля битов достоверности.
В табло также хранится текущая информация о доступности устройств обра-
ботки (функциональных блоков).
Функционирование табло тесно увязано с работой буфера переименования и мо-
жет быть описано следующим образом. Каждая команда после декодирования и пе-
реименования регистров заносится в очередную свободную ячейку табло. Декоди-
рованный код операции помещается в поле операции. Если команда предполагает
загрузку результата в регистр, то на этот регистр имеется ссылка в БП и в поле
результата заносится номер входа БП, в котором хранится последняя ссылка на
данный регистр. Далее делается попытка заполнить поля операндов значениями
операндов. Сначала производится поиск нужного значения в аппаратном регист-
ровом файле. Если бит ЗД регистра операнда в АРФ установлен в 0 (значение не-
достоверно), это означает, что операндом является результат предыдущей опера-
ции и дальше следует искать в БП. Выполняется ассоциативный поиск ссылки на
регистр в буфере переименования. При удачном исходе (в найденной ячейке БП
биты ЗД и ПП установлены в единицу) требуемое значение операнда берется из
буфера переименования. В любом варианте при обнаружении достоверного значе-
ния операнда поле операнда ячейки табло заполняется найденным значением, а со-
ответствующий этому полю бит достоверности (ЗД) устанавливается в единицу.
Если же значение операнда еще не вычислено, то в поле операнда ячейки табло
заносится идентификатор входа буфера переименования, где находится последняя
ссылка на искомый регистр, при этом бит достоверности такого поля сбрасывает-
ся в 0.
Обновление информации о готовности операндов и доступности функциональ-
ных устройств выполняется в каждом цикле процессора.