Кто-нибудь знает эту функцию компилятора? Кажется, GCC поддерживает это. Как это работает? Какова потенциальная прибыль? В этом случае это хорошо? Внутренние петли?
(этот вопрос специфичен, а не об оптимизации в целом, спасибо)
Кто-нибудь знает эту функцию компилятора? Кажется, GCC поддерживает это. Как это работает? Какова потенциальная прибыль? В этом случае это хорошо? Внутренние петли?
(этот вопрос специфичен, а не об оптимизации в целом, спасибо)
Он работает, помещая дополнительный код для подсчета количества раз, когда выполняется каждая кодировка. Когда вы компилируете второй раз, компилятор использует знания, полученные о выполнении вашей программы, о которых он мог только догадываться раньше. Есть несколько вещей, с которыми PGO может работать:
Вы никогда не знаете, насколько это может помочь, пока вы не протестируете его.
PGO дает около 5% ускорения при компиляции x264, проект, над которым я работаю, и у нас есть встроенная система для него (make fprofiled). В некоторых случаях это отличное ускорение скорости и, вероятно, помогает в приложениях, которые в отличие от x264 меньше состоят из рукописной сборки.
Джейсон советует правильно. Лучшее ускорение, которое вы получите от "обнаружения", которое вы дадите алгоритму O (n 2), проскальзывает во внутренний цикл где-нибудь или вы можете кэшировать определенные вычисления за пределами дорогих функций.
По сравнению с микро-оптимизациями, которые могут инициировать PGO, это крупные победители. Как только вы достигнете такого уровня оптимизации, PGO сможет помочь. Мы никогда не испытывали большой удачи в этом, потому что стоимость инструментария была такова, что наше приложение становится необычно медленным (на несколько порядков).
Мне нравится использовать Intel VTune в качестве профилировщика прежде всего потому, что он неинвазивный по сравнению с инструментальными профилографами, которые слишком сильно меняют поведение.
Самое интересное в оптимизации - это то, что увеличение скорости происходит в самых неповторимых местах.
Это также причина, по которой вам нужен профайлер, а не гадать, где проблемы со скоростью.
Я рекомендую начинать с профайлера (gperf
, если вы используете GCC), и просто начинайте прокручивать результаты запуска приложения через некоторые обычные операции.