профильная оптимизация (C) - PullRequest
       41

профильная оптимизация (C)

12 голосов
/ 09 сентября 2008

Кто-нибудь знает эту функцию компилятора? Кажется, GCC поддерживает это. Как это работает? Каков потенциальный выигрыш? В каком случае это хорошо? Внутренние петли?

(этот вопрос конкретный, а не об оптимизации вообще, спасибо)

Ответы [ 4 ]

12 голосов
/ 12 сентября 2008

Работает, размещая дополнительный код для подсчета количества попыток каждого кодового пути. Когда вы компилируете второй раз, компилятор использует знания о выполнении вашей программы, о которых он мог только догадываться ранее. PGO может работать в нескольких направлениях:

  • Решение о том, какие функции должны быть встроенными или нет, в зависимости от того, как часто они вызываются.
  • Решение о том, как размещать подсказки о том, на какую ветвь оператора «if» следует прогнозировать, основываясь на проценте вызовов, идущих в одну или другую сторону.
  • Решение о том, как оптимизировать циклы в зависимости от того, сколько итераций выполняется при каждом вызове цикла.

Вы никогда не знаете, насколько эти вещи могут помочь, пока не протестируете.

6 голосов
/ 16 сентября 2008

PGO дает прирост скорости примерно на 5% при компиляции x264, проекта, над которым я работаю, и у нас есть встроенная система для него (make fprofiled). В некоторых случаях это бесплатное повышение скорости и, вероятно, больше помогает в приложениях, которые, в отличие от x264, менее состоят из рукописной сборки.

4 голосов
/ 09 сентября 2008

Совет Джейсона верен. Наилучшие ускорения, которые вы получите, будут получены при «обнаружении» того, что вы позволили алгоритму O (n 2 ) попасть во внутренний цикл или что вы можете кэшировать определенные вычисления вне дорогих функций.

По сравнению с микрооптимизациями, которые может вызывать PGO, это большие победители. После того, как вы сделали этот уровень оптимизации, вам может помочь PGO. Нам никогда не везло с этим - стоимость инструментов была такой, что наше приложение стало необычайно медленным (на несколько порядков).

Мне нравится использовать Intel VTune в качестве профилировщика прежде всего потому, что он неинвазивен по сравнению с инструментальными профилировщиками, которые слишком сильно меняют поведение.

2 голосов
/ 09 сентября 2008

Самое интересное в оптимизации - это то, что прирост скорости можно найти в самых неожиданных местах.

Это также причина, по которой вам нужен профилировщик, а не угадывание проблем со скоростью.

Я рекомендую начать с профилировщика (gperf, если вы используете GCC) и просто начать изучать результаты запуска вашего приложения через некоторые обычные операции.

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