Декодирование команд, переименование ресурсов и диспетчеризация

На этой фазе определяются существенные зависимости (RAW) по данным между командами и преодолеваются несущественные (WAW, WAR), произво­дится распределение команд по буферам команд функциональных устройств.

При декодировании команды создается одна или несколько упорядо­ченных троек, каждая из которых включает: 1) исполняемую операцию, 2) указатели на операнды, 3) указатель на место помещения результата.

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

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

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

Рассмотрим пример реализации данного способа переименования. Пусть требуется выполнить команду sub r3, г3, 5 (из значения регистра г3 вычесть константу 5 и поместить результат в регистр r3). Логические имена регистров начинаются со строчной буквы, а физические — с прописной. Пусть также в момент исполнения команды в таблице регистру r3 соответствует R1. Пер­вым регистром в списке свободных пусть является R2. Поэтому в поле ре­зультата команды sub r3, r3, 5 регистр r3 заменяется на R2. Исполнимая ко­манда приобретает вид sub R2, R1, 5. Любая следующая за sub команда, ис­пользующая ее результат, должна использовать в качестве операнда R2.

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

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

Команды помещаются в конец буфера. По завершению команды ее резуль­тат заносится в заранее предписанный ей элемент очереди, независимо от места в очереди, занимаемого этим элементом. К моменту достижения командой на­чала буфера, если она была исполнена, ее результат помещается в регистровый файл, а сама команда удаляется. Команда, находящаяся в буфере и не исполненная в виду отсутствия значения операнда, остается в нем вплоть до получе­ния этого значения. Одновременно может выбираться из очереди или поме­щаться в нее несколько команд, однако всегда соблюдается дисциплина FIFO.

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

Рассмотрим выполнение переименования на примере команды sub r3,r3,5. Пусть значение г3 находится или будет находиться в переупорядочивающем буфере в элементе 6. Регистр г3 как источник заменяется на соответствую­щее поле результата элемента 6 буфера. Команда sub помещается в конец переупорядочивающего буфера, например, в элемент 7. Этот номер затем записывается в таблицу для использования командами-потребителями ре­зультата. Следует заметить, что переупорядочивающий буфер фактически вводит потоковую модель вычислений по готовности операндов.

Независимо от способа переименования в суперскалярном процессоре устраняются лишние зависимости по данным.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: