Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Метод [ править ]

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

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

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

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

Принятие [ править ]

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

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

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

Реализации [ править ]

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

  • Intel C ++ Compiler и Fortran компиляторов [6]
  • GNU Compiler Collection компиляторы
  • Oracle Solaris Studio (ранее называвшаяся Sun Studio)
  • Компилятор Microsoft Visual C ++ [1]
  • Лязг
  • IBM XL C / C ++ [12]

См. Также [ править ]

  • Адаптивная оптимизация
  • Динамическое устранение мертвого кода
  • Глобальная оптимизация
  • Горячая точка (компьютерное программирование)
  • Межпроцедурная оптимизация
    • Оптимизация времени компоновки (LTO)
  • Отслеживание своевременной компиляции

Ссылки [ править ]

  1. ^ a b «Блог группы разработчиков Microsoft Visual C ++» .
  2. ^ «Профильная обратная связь (PDF)» . Проверено 23 ноября 2013 года .
  3. ^ Батист Wicht, Роберто А. Витильо, Dehao Чен, Дэвид Levinthal (24 ноября 2014). «Оптимизация на основе профиля с аппаратным подсчетом». arXiv : 1411.6361 . Bibcode : 2014arXiv1411.6361W . Цитировать журнал требует |journal=( помощь )CS1 maint: использует параметр авторов ( ссылка )
  4. ^ JW Backus, RJ Beeber,др., Фортран Автоматическая Система кодирования , Труды Объединенной Западной компьютерной конференции, февраль 1957, стр. 195
  5. ^ "К. Петтис, Р. Хансен, Позиционирование кода на основе профиля, Конференция по разработке и внедрению языков программирования ACM SIGPLAN, 1990 г." (PDF) .
  6. ^ a b «Компилятор Intel Fortran 10.1, профессиональные и стандартные выпуски для Mac OS X» . Архивировано из оригинального 28 сентября 2013 года .
  7. ^ "Краткий справочник по оптимизации с указанием профиля (PGO)" .
  8. ^ Построение с оптимизацией на основе профилей , mozilla.org, 13 августа 2013 г.
  9. ^ a b Дехао Чен (2010), « Укрощение образцов аппаратных событий для компиляции fdo », Труды 8-го ежегодного международного симпозиума IEEE / ACM по генерации и оптимизации кода , стр. 42–52.
  10. Иванов, Владимир (25 июля 2013 г.). "Обзор JIT-компиляции JVM" . Проверено 10 сентября 2016 года .
  11. Маршан, Себастьян (31 октября 2016 г.). «Ускорение Chrome в Windows с помощью PGO» . Архивировано 1 ноября 2016 года . Проверено 1 ноября +2016 .
  12. ^ Кинтеро, Дино; Шаброль, Себастьян; Чен, Чи Хуэй; Дхандапани, Мурали; Холлоуэй, Талор; Джадхав, Чандракант; Ким, Сэ Ки; Куриан, Сиджо; Радж, Бхарат; Ресенде, Ронан; Роден, Бьорн; Шринивасан, Ниранджан; Уэйл, Ричард; Занатта, Уильям; Чжан, Чжи; Redbooks, IBM (1 мая 2013 г.). «Руководство по производительности IBM Power Systems: внедрение и оптимизация» . IBM Redbooks - через Google Книги.