Условный переход — любое изменение последовательности выполнения кода.
if
break
switch
do
while
for
Предсказатель переходов ⇔ Блок выборки команд
Выполнение команды раньше того, как станет известно, понадобится она или нет.
Важно: спекулятивно выполняются только команды, результат которых можно отменить.
Poison bit — альтернативный механизм исключений.
Если спекулятивно выполненная команда вызвала ошибку, устанавливается ядовитый бит.
Если результат команды используется, проверяется ядовитый бит и выбрасывается исключение.
Если результат команды не используется, ядовитый бит сбрасывается.
Если 3 строка выполнится спекулятивно, до if
, деление на ноль вызовет установку ядовитого бита.
Ветвление — условный переход.
Примеры:
for
.Двухбитный счётчик вероятности условного перехода: