Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
учебник_Вс.doc
Скачиваний:
14
Добавлен:
01.03.2025
Размер:
13 Мб
Скачать
☆

2.1.3. Предварительная выборка команд и предсказание переходов

В современных мультипроцессорах повышенные требования предъявляются к пропускной способности интерфейса «микропроцессор-память». Это связано с тем, что при обработке необходимо извлекать из памяти за один такт несколько команд. Также в систему кэширования вводятся средства предсказания переходов, основное назначение которых – повысить вероятность наличия в кэш-памяти, требуемой команды.

Этапы исполнения условных ветвлений:

  1. распознавание команды условного ветвления;

  2. проверка выполнения условного перехода;

  3. вычисление адреса перехода;

  4. передача управления в случае перехода.

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

  1. Для ускорения декодирования используются либо дополнительные биты в поле команды, либо предварительное декодирование команд при их выборке из кэш-памяти команд.

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

  3. Чтобы определить адрес ветвления необходимо выполнить целочисленное сложение содержимого счётчика команд и смещения, заданного в поле команды ветвления. Для ускорения вычисления адреса можно использовать буфер, содержащий ранее использованные адреса переходов.

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

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

Использование механизма динамического отображения логических ресурсов на физические ресурсы микропроцессора помогает избавиться от лишних «записей после чтения» или « записей после записи» зависимостей.

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

Например, пусть нужно выполнить команду sub r3, r3, 5 (из значения регистра r3 вычесть 5 и записать результат в r3). Пусть в момент исполнения команды в таблице логическому регистру r3 соответствует физический R1. Первый регистр в списке свободных - R2. Тогда в поле результата команды sub r3, r3, 5 регистр r3 замещается R2. Тогда на самом деле выполняется команда sub R2, R1, 5. А следующая команда, которой нужен результат sub, должна обращаться к R2.

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

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