Подтвердить что ты не робот

Оптимизация на основе профиля (C)

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

(этот вопрос специфичен, а не об оптимизации в целом, спасибо)

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

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

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