вероятные и маловероятные макросы - PullRequest
2 голосов
/ 12 мая 2011

Существуют ли какие-либо стандартные способы (с использованием профилировщиков), чтобы проверить, может ли использование этих макросов предсказания ветвления, распознаваемых gcc, принести пользу определенным тактовым циклам с точки зрения конвейерной обработки команд? Как мы можем измерить это с использованием и без использования этих макросов в программе? Является ли измерение прошедшего времени единственным способом сделать это?

Существуют ли в Windows аналогичные макросы предсказания ветвлений (например, работа с клавишами?)

-Kartlee

1 Ответ

2 голосов
/ 12 мая 2011

Я не знаком ни с одним из профилировщиков, которые будут показывать эффективность филиалов.Программа Linux time должна работать достаточно хорошо, чтобы помочь вам в тестировании.

На всех современных процессорах x86 инструкции JMPcc выполняются быстрее, если они не разветвляются, а вместо этого просто переходят к следующей инструкции.

Функция GCC __builtin_expect предоставляет подсказку компилятору - она ​​сообщает, какая сторона if () должна быть транзитной, а какая - ветвью.Вы должны использовать эту функцию, только если вы на 100% уверены в этом.Не существует эквивалентной функции для VC ++.Я не уверен насчет ICC.

Лучший способ сделать это - избежать этих нестандартных функций и использовать Profile Guided Optimization (PGO), при котором вы запускаете программу и записывает все эти ветви ввыяснить, где вещи идут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...