Прогнозирование ветвлений и прогнозирование ветвлений
Понял ли я это правильно, if
операторы больше зависят от предсказания ветвления, а поиск в v-таблице больше зависит от предсказания цели ветвления? Что касается v-таблиц, то здесь нет "предсказания ветвления", только целевое предсказание?
Попытка понять, как v-таблица обрабатывается процессором.
1 ответ
Решение
Предсказание ветвления - это предсказание того, будет ли принято ветвление. Предсказание цели ветвления - это предсказание, куда направляется ветвь. Эти две вещи независимы и могут встречаться во всех комбинациях.
Примеры этого могут быть:
Безусловная ветвь, фиксированная цель
- Бесконечный цикл
goto
заявлениеbreak
или жеcontinue
заявление- Конец предложения then
if/else
заявление (прыгать мимоelse
оговорка) - Не виртуальный вызов функции
Безусловная ветвь, переменная цель
- Возвращаясь из функции
- Вызов виртуальной функции
- Вызов указателя функции
switch
оператор (если скомпилирован в таблицу переходов)
Условная ветвь, фиксированная цель
if
заявлениеswitch
заявление (если составлено в сериюif/else
заявления)- Проверка состояния петли
&&
а также||
операторы- Троичный
?:
оператор
Условная ветвь, переменная цель
- Менее вероятно, будет отображаться в нормальных условиях, но компилятор может синтезировать один в качестве оптимизации, объединяя два из вышеупомянутых случаев. Например, на x86 компилятор может оптимизировать код
if (condition) { obj->VirtualFunctionCall(); }
в условный косвенный скачок, какjne *%eax
если он появляется в конце функции из-за оптимизации хвостового вызова.