Так выглядет конвеер в случае непредсказанного условного перехода: (Prefetcher сбрасывается).
Если на этапе prefetch знать какая ветка для условного перехода будет выполнена, то можно не сбрасывать конвеер:
Что бы правильно заполнять prefetcher надо уметь предсказывать условные переходы. Для этого служит специальный узел называемый BTB (Branch Target Buffer). Этот узел является некоторым аналогом cache, но для условных переходов. Он содержит: o Адресс инструкции перехода o Предсказание будет ли переход или нет По запросу от prefetchera он выдает предсказание для указанного адресса где находится инструкция перехода.
Histeresis:
Saturation:
Для предсказания обычно используется схема с 4 состояниями:
o Точно не будет (по умолчанию если неизвестно) o Скорее всего не будет o Скорее всего будет о Точно будет Вход в BTB имеет формат: +-----------------+----------+ | адресс JUMP | история | +-----------------+----------+ как правило BTB имеет ассоциативную структуру типа cache.
В настоящее время используются навороченных схемы для предсказания переходов которые предсказывают переходы для циклов:
indirect переходов
возвратов из функций (call stack).