предсказание ветвления против предсказания цели ветвления

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

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


person user997112    schedule 06.02.2014    source источник
comment
Давайте закроем вопрос, потому что его длина всего 4 строки.....   -  person user997112    schedule 06.02.2014
comment
Это довольно ехидный комментарий, я понимаю, что некомментированное предложение закрыть может показаться несправедливым, но причина (в некоторой степени) задокументирована в выбранном варианте (слишком широком), и вы не были проголосованы против, что говорит о том, что избиратель думал, что этот вопрос не может быть эффективно решать на StackOverflow, что больше связано с самим StackOverflow, чем с вашим вопросом. Насколько я знаю, вы правы в своем выводе: if и циклы в целом используют предсказание ветвления (логический вывод), в то время как указатели функций/виртуальные функции используют предсказание цели ветвления (целевой вывод).   -  person Matthieu M.    schedule 06.02.2014
comment
Как узнать причину закрытия? Это не может быть общий вопрос - есть два вопроса, и связанные, и конкретные? (но я благодарю вас за то, что нашли время ответить на мой вопрос в своем комментарии)   -  person user997112    schedule 06.02.2014
comment
Ах! Возможно, у вас недостаточно репутации, чтобы иметь доступ к диалогу close :x   -  person Matthieu M.    schedule 06.02.2014


Ответы (1)


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

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

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

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

Безусловный переход, переменная цель

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

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

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

Условный переход, переменная цель

  • Менее вероятно появление в нормальных условиях, но компилятор может синтезировать один как оптимизацию, объединяя два из вышеперечисленных случаев. Например, на платформе x86 компилятор может оптимизировать код, например if (condition) { obj->VirtualFunctionCall(); }, в условный непрямой переход, например jne *%eax, если он появляется в конце функции из-за оптимизации хвостового вызова.
person Adam Rosenfield    schedule 06.02.2014
comment
Просто посмотрите на это: research.engineering.wustl.edu/~songtian /pdf/intel-haswell.pdf если вы перейдете к слайду 13, где находится предсказатель цели перехода? - person user997112; 06.02.2014
comment
@ user997112 user997112 Вероятно, это часть верхнего левого блока, называемого предикторами ветвления, иначе как бы вы передали цель в блок выборки? - person Leeor; 07.02.2014