Измерьте, как часто ветка ошибается - PullRequest
3 голосов
/ 09 января 2012

Предполагая, что у меня есть ветвь if-else в C ++, как я могу (в коде) измерить, как часто ветвление неправильно прогнозируется?Я хотел бы добавить несколько вызовов или макросов вокруг ветви (аналогично тому, как вы выполняете профилирование снизу вверх), которые сообщали бы о неправильных прогнозах ветви.

Было бы неплохо иметь универсальный метод, но давайте сделаем Intel i52500k для начинающих.

Ответы [ 3 ]

2 голосов
/ 09 января 2012

Если вы используете процессор AMD, AMD 100A * CodeAnalyst - это именно то, что вам нужно (работает на Windows и Linux) *.

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

Вы также можете проверить gperf & OProfile (только для linux), посмотреть, насколько хорошо онивыполнить (я никогда не использовал их, но я вижу, что они упоминаются довольно часто).

* CodeAnalyst должен работать на процессоре Intel, вы просто не получите всего хорошего анализа уровня процессора.

1 голос
/ 09 января 2012

Интересно, можно ли было бы извлечь эту информацию из g++ -fprofile-arcs?Он должен точно измерить это для обратной связи с оптимизатором для оптимизации ветвления.

1 голос
/ 09 января 2012

OProfile

OProfile довольно сложный, но он может профилировать все, что отслеживает ваш процессор.

Просмотрите Справочник типов событий и посмотритедля вашего конкретного процессора.

Например, здесь core2 events .После быстрого поиска я не вижу счетчиков событий для прогнозирования пропущенных переходов в архитектуре core2.

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