Прогнозирование ветвлений и прогнозирование ветвлений

Понял ли я это правильно, if операторы больше зависят от предсказания ветвления, а поиск в v-таблице больше зависит от предсказания цели ветвления? Что касается v-таблиц, то здесь нет "предсказания ветвления", только целевое предсказание?

Попытка понять, как v-таблица обрабатывается процессором.

1 ответ

Решение

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

Примеры этого могут быть:

Безусловная ветвь, фиксированная цель

  • Бесконечный цикл
  • goto заявление
  • break или же continue заявление
  • Конец предложения then if/else заявление (прыгать мимо else оговорка)
  • Не виртуальный вызов функции

Безусловная ветвь, переменная цель

  • Возвращаясь из функции
  • Вызов виртуальной функции
  • Вызов указателя функции
  • switch оператор (если скомпилирован в таблицу переходов)

Условная ветвь, фиксированная цель

  • if заявление
  • switch заявление (если составлено в серию if/else заявления)
  • Проверка состояния петли
  • && а также || операторы
  • Троичный ?: оператор

Условная ветвь, переменная цель

  • Менее вероятно, будет отображаться в нормальных условиях, но компилятор может синтезировать один в качестве оптимизации, объединяя два из вышеупомянутых случаев. Например, на x86 компилятор может оптимизировать код if (condition) { obj->VirtualFunctionCall(); } в условный косвенный скачок, как jne *%eax если он появляется в конце функции из-за оптимизации хвостового вызова.
Другие вопросы по тегам