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

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

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

9

Решение

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

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

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

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

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

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

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

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

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

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]