stringtranslate.com

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

В компьютерном программировании оптимизация с управлением профилем ( PGO , иногда произносится как пого [1] ), также известная как оптимизация с управлением профилем ( PDF ) [2] или оптимизация с управлением обратной связью ( FDO ) [3] , представляет собой метод оптимизации компилятора , использующий предварительный анализ программных артефактов или поведения (« профилирование ») для улучшения ожидаемой производительности выполнения программы.

Метод

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

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

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

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

Принятие

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

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

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

Google опубликовала статью [12], в которой описывается инструмент, позволяющий использовать производственные профили для управления сборками, что приводит к повышению производительности до 10%.

Реализации

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

Смотрите также

Ссылки

  1. ^ ab "Блог команды Microsoft Visual C++". 12 ноября 2008 г.
  2. ^ "Профилеориентированная обратная связь (PDF)". XL C/C++ для AIX . Получено 23 ноября 2013 г. .
  3. ^ Baptiste Wicht; Roberto A. Vitillo; Dehao Chen; David Levinthal (24 ноября 2014 г.). «Аппаратная подсчетная оптимизация на основе профиля». arXiv : 1411.6361 . Bibcode :2014arXiv1411.6361W. {{cite journal}}: Цитировать журнал требует |journal=( помощь )
  4. ^ JW Backus, RJ Beeber и др., Автоматическая система кодирования Fortran , Труды Западной объединенной компьютерной конференции, февраль 1957 г., стр. 195
  5. ^ "К. Петтис, Р. Хансен, Позиционирование кода с использованием профилей, Конференция по проектированию и внедрению языков программирования ACM SIGPLAN, 1990 г." (PDF) .
  6. ^ ab "Intel Fortran Compiler 10.1, Professional и Standard Editions, for Mac OS X". Архивировано из оригинала 28 сентября 2013 г.
  7. ^ «Краткий справочник по оптимизации на основе профиля (PGO)».
  8. ^ Создание с помощью оптимизации на основе профиля, mozilla.org, 13 августа 2013 г.
  9. ^ ab Dehao Chen (2010), «Укрощение образцов аппаратных событий для компиляции fdo», Труды 8-го ежегодного международного симпозиума IEEE/ACM по генерации и оптимизации кода , стр. 42–52.
  10. ^ Иванов, Владимир (25 июля 2013 г.). "Обзор компиляции JVM JIT" . Получено 10 сентября 2016 г. .
  11. ^ Маршан, Себастьен (31 октября 2016 г.). «Сделаем Chrome на Windows быстрее с помощью PGO». Архивировано из оригинала 1 ноября 2016 г. Получено 1 ноября 2016 г.
  12. ^ Чен, Дэхао; Ли, Дэвид Синьлян; Мосли, Типп (2016). «AutoFDO: Автоматическая оптимизация с обратной связью для приложений масштаба склада». Труды Международного симпозиума по генерации и оптимизации кода 2016 года. Нью-Йорк, штат Нью-Йорк, США. С. 12–23. doi : 10.1145/2854038.2854044 . ISBN 978-1-4503-3778-6. S2CID  17473127.{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  13. ^ «Оптимизация на основе профиля [VS 2019]». 18 октября 2022 г.
  14. ^ «Оптимизация на основе профиля [Руководство пользователя компилятора Clang]».
  15. ^ Кинтеро, Дино; Шаброль, Себастьен; Чен, Чи Хуэй; Дхандапани, Мурали; Холлоуэй, Талор; Джадхав, Чандракант; Ким, Сае Ки; Куриан, Сиджо; Радж, Бхарат; Ресенде, Ронан; Роден, Бьёрн; Шринивасан, Ниранджан; Уэйл, Ричард; Занатта, Уильям; Чжан, Чжи; Redbooks, IBM (1 мая 2013 г.). Руководство по производительности IBM Power Systems: внедрение и оптимизация. Красные книги IBM. ISBN 978-0-7384-3766-8– через Google Книги.
  16. ^ «Оптимизация собственного исполняемого файла с помощью профильной оптимизации [руководства по GraalVM]».
  17. ^ «Что нового в .NET 6: Профильная оптимизация». 26 мая 2023 г.
  18. ^ «Оптимизация на основе профиля».