Координация работ исполнительных элементов (арифметико-логических устройств, регистров и т.п.), страница 4

2. Подмена регистров

Программа (ПРОБЛЕМА)

Реальный порядок команд и регистры (РЕШЕНИЕ ПРОБЛЕМЫ)

Р1=Р2+Р3

Р1=Р2+Р3

Р4=Р1+Р5

Р5’=Р6+Р7 (Р5’ – теневой (временный) регистр)

Р5=Р6+Р7

Р4=Р1+Р5

Некая команда

Некая команда, Р5=Р5’

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


ПРОБЛЕМА ПЕРЕХОДОВ

В конвейеризированных процессорах существует ряд проблем, связанных с одновременным выполнением команд. Одна из таких проблем – проблема условных и безусловных переходов.

Безусловный переход (goto, jump)

Стадии конвейера

1

Выборка команды

Код 1

Код 2

Код 3

???

Код X

Декодирование

INC

JMP

Выборка операндов

А

X

Исполнение

A+1

-

Сохранение результатов

!

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

Условный переход

Стадии конвейера

1

Выборка команды

Код 1

Код 2

Код 3

???

???

Код X

Декодирование

INC

JE

Выборка операндов

А

X

Исполнение

A+1

Сохранение результатов

!

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


МЕТОДЫ БОРЬБЫ С УСЛОВНЫМИ ПЕРЕХОДАМИ

Существует несколько методов борьбы с условными переходами.

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

 1) ПРОГНОЗИРОВАНИЕ ПЕРЕХОДОВ

Динамическое прогнозирование (самый распространенный метод): метод использует вероятности, априорную информацию. Процессор пытается предсказать ветвь, по которой пойдет выполнение программы, и начинает выполнять эту ветвь; если ветвь угадана, то процессор продолжает работу без потери тактов, когда ветвь не угадывается, результаты работы по неправильной ветви отбрасываются, и начинается выполнение правильной ветви. При динамическом прогнозировании ветвь выбирается процессором «на ходу» на основании ранее разработанной статистики о вероятности выполнения ветвей.

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