Оптимизация по профилю

редактировать
Техника оптимизации компилятора в компьютерном программировании, которая использует профилирование для повышения производительности программы

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

Содержание
  • 1 Метод
  • 2 Принятие
  • 3 Реализации
  • 4 См. Также
  • 5 Ссылки
Метод

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

Первый компилятор высокого уровня, представленный как Система автоматического кодирования Fortran в 1957 году, разбил код на блоки и разработал таблицу частоты, с которой каждый блок выполняется, посредством моделирования выполнения код в стиле Монте-Карло, в котором результат условных передач (как с помощью операторов типа IF) определяется генератором случайных чисел, соответствующим взвешиванием какие бы операторы FREQUENCYни были предоставлены программистом.

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

Своевременная компиляция может использовать информацию времени выполнения для динамической перекомпиляции частей исполняемого кода для генерации более эффективного собственного кода. Если динамический профиль изменяется во время выполнения, он может деоптимизировать предыдущий собственный код и сгенерировать новый код, оптимизированный с использованием информации из нового профиля.

Принятие

Существует поддержка сборки Firefox с использованием PGO. Несмотря на то, что PGO эффективен, он не получил широкого распространения в программных проектах из-за утомительной модели двойной компиляции. Также возможно выполнить PGO без инструментовки, собрав профиль с помощью аппаратных счетчиков производительности. Этот подход, основанный на выборке, имеет гораздо меньшие накладные расходы и не требует специальной компиляции.

HotSpot Виртуальная машина Java (JVM) использует оптимизацию на основе профиля для динамической генерации собственного кода. Как следствие, двоичный файл программного обеспечения оптимизируется для фактической нагрузки , которую он получает. Если нагрузка изменяется, адаптивная оптимизация может динамически перекомпилировать работающее программное обеспечение, чтобы оптимизировать его для новой нагрузки. Это означает, что все программное обеспечение, выполняемое на JVM HotSpot, эффективно использует оптимизацию на основе профиля.

PGO был принят в Microsoft Windows версию Google Chrome. PGO был включен в 64-битной редакции Chrome, начиная с версии 53 и версии 54 для 32-битной редакции.

Реализации

Примерами компиляторов, реализующих PGO, являются:

См. Также
Ссылки
Последняя правка сделана 2021-06-02 07:44:52
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте