Предсказатель переходов

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

Условный переход — любое изменение последовательности выполнения кода.

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

  • if
  • break
  • switch

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

  • do
  • while
  • for

Модуль предсказания переходов

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

Спекулятивное исполнение

Выполнение команды раньше того, как станет известно, понадобится она или нет.

Важно: спекулятивно выполняются только команды, результат которых можно отменить.

Ядовитый бит

Poison bit — альтернативный механизм исключений.

Если спекулятивно выполненная команда вызвала ошибку, устанавливается ядовитый бит.

Если результат команды используется, проверяется ядовитый бит и выбрасывается исключение.

Если результат команды не используется, ядовитый бит сбрасывается.

Ядовитый бит

Если 3 строка выполнится спекулятивно, до if, деление на ноль вызовет установку ядовитого бита.

Методы предсказания ветвлений

Методы предсказания ветвлений

  • Статические — без анализа истории ветвлений.
  • Динамические — с анализом истории ветвлений.

Ветвление — условный переход.

Статический метод

  • Самый простой.
  • Используется при невозможности применить динамические методы.
  • История выполнения и ветвления не анализируется.
  • Предполагает, что переходы:
    • выполняются всегда
    • не выполняются никогда

Статический метод

Примеры:

  • В конвейер всегда загружаются инструкции, расположенные после инструкции условного перехода.
  • В конвейер всегда загружаются инструкции, расположенные по адресу условного перехода, если переход выполнется назад.

Счётчик

  • Сохраняет информацию о прошлом переходе.
  • Ошибочно срабатывает на первой и последней итерациях for.

Счётчик с насыщением

Двухбитный счётчик вероятности условного перехода:

  • 11 — “будет выполнен”
  • 10 — “возможно, будет выполнен”
  • 01 — “возможно, не будет выполнен”
  • 00 — “не будет выполнен”

Счётчик с насыщением

Счётчик с насыщением

Адаптивный двухуровневый предсказатель

Другие

  • Гибридный — использование нескольких предсказателей одновременно.
  • Предсказатель цикла — использует счётчик цикла для отсчёта количества переходов.
  • Предсказатель адреса возврата из функций — используется таблица с адресами возврата.