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) ПРОГНОЗИРОВАНИЕ ПЕРЕХОДОВ
Динамическое прогнозирование (самый распространенный метод): метод использует вероятности, априорную информацию. Процессор пытается предсказать ветвь, по которой пойдет выполнение программы, и начинает выполнять эту ветвь; если ветвь угадана, то процессор продолжает работу без потери тактов, когда ветвь не угадывается, результаты работы по неправильной ветви отбрасываются, и начинается выполнение правильной ветви. При динамическом прогнозировании ветвь выбирается процессором «на ходу» на основании ранее разработанной статистики о вероятности выполнения ветвей.
Статическое прогнозирование: процент правильного прогнозирования выше, чем у динамического; нет большого блока, который управляет проверкой; работает на этапе компиляции или создания программ (программист сам делает); требуется систему определенных команд. При статическом прогнозировании вероятная ветвь выбирается при разработке или компиляции программы и указывается в ходе программы.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.