Оптимизация на основе профиля
Оптимизация на основе профиля ( PGO , иногда произносится как pogo) . [1] ), также известный как обратная связь по профилю ( PDF ), [2] и оптимизация с обратной связью ( FDO ) [3] — это метод оптимизации компилятора в компьютерном программировании , который использует профилирование для повышения производительности выполнения программы .
Метод
[ редактировать ]Методы оптимизации, основанные на статическом анализе исходного кода программы, предусматривают повышение производительности кода без фактического выполнения программы. не Динамический анализ программы выполняется. Анализ может даже учитывать код внутри циклов, включая количество раз, когда цикл будет выполняться, например, при развертывании цикла . При отсутствии всей информации о времени выполнения статический анализ программы не может принять во внимание, как часто фактически выполняется этот участок кода.
Первый компилятор высокого уровня, представленный в 1957 году как Система автоматического кодирования Фортрана, разбил код на блоки и разработал таблицу частоты выполнения каждого блока посредством симуляции выполнения кода методом Монте-Карло , в котором результат условные переводы (как через IF
операторы -type) определяется генератором случайных чисел, соответствующим образом взвешенным по любому FREQUENCY
утверждения были предоставлены программистом. [4]
Вместо информации о частоте, предоставленной программистом, оптимизация на основе профиля использует результаты профилирования тестовых запусков инструментированной программы для оптимизации окончательно сгенерированного кода . [5] [6] [7] Компилятор получает доступ к данным профиля из примера запуска программы через репрезентативный входной набор. Результаты показывают, какие области программы выполняются чаще, а какие реже. Все оптимизации выигрывают от обратной связи на основе профилей, поскольку они меньше зависят от эвристики при принятии решений о компиляции. Однако есть оговорка: выборка данных, подаваемая в программу на этапе профилирования, должна быть статистически репрезентативной для типичных сценариев использования; в противном случае обратная связь на основе профиля может навредить общей производительности финальной сборки вместо того, чтобы улучшить ее.
Компиляция «точно в срок» может использовать информацию времени выполнения для динамической перекомпиляции частей исполняемого кода для создания более эффективного машинного кода. Если динамический профиль изменяется во время выполнения, он может деоптимизировать предыдущий собственный код и сгенерировать новый код, оптимизированный с использованием информации из нового профиля.
Принятие
[ редактировать ]Существует поддержка сборки Firefox с использованием PGO. [8] Несмотря на то, что PGO эффективен, он не получил широкого распространения в программных проектах из-за утомительной модели двойной компиляции. [9] Также возможно выполнить PGO без инструментирования, собрав профиль с помощью аппаратных счетчиков производительности . [9] Этот подход, основанный на выборке, требует гораздо меньших затрат и не требует специальной компиляции.
HotSpot ( JVM Виртуальная машина Java ) использует оптимизацию на основе профилей для динамического создания машинного кода. Как следствие, двоичный файл программного обеспечения оптимизируется для фактической нагрузки, которую он получает. Если нагрузка изменится, адаптивная оптимизация может динамически перекомпилировать работающее программное обеспечение, чтобы оптимизировать его для новой нагрузки. Это означает, что все программное обеспечение, выполняемое на HotSpot JVM, эффективно использует оптимизацию на основе профилей. [10]
PGO был принят в для Microsoft Windows версии Google Chrome . PGO был включен в 64-битной версии Chrome, начиная с версии 53 и версии 54 для 32-битной версии. [11]
Google опубликовал статью [12] описание инструмента используемого для использования производственных профилей для управления сборками, что приводит к повышению производительности до 10%.
Реализации
[ редактировать ]Примеры компиляторов, реализующих PGO:
- Компилятор Intel C++ и Fortran компиляторы [6]
- коллекции компиляторов GNU Компиляторы
- Oracle Solaris Studio (ранее называвшаяся Sun Studio)
- Microsoft Visual C++ Компилятор [1] [13]
- Кланг [14]
- IBM XL C/С++ [15]
- ГраальВМ [16] Корпоративная версия
- .NET JIT-компилятор [17]
- Идти [18]
См. также
[ редактировать ]- Адаптивная оптимизация
- Динамическое устранение мертвого кода
- Глобальная оптимизация
- Горячая точка (компьютерное программирование)
- Межпроцедурная оптимизация
- Отслеживание своевременной компиляции
Ссылки
[ редактировать ]- ^ Перейти обратно: а б «Блог группы Microsoft Visual C++» . 12 ноября 2008 г.
- ^ «Обратная связь по профилю (PDF)» . XL C/C++ для AIX . Проверено 23 ноября 2013 г.
- ^ Батист Вихт; Роберто А. Витилло; Дехао Чен; Дэвид Левинталь (24 ноября 2014 г.). «Аппаратная оптимизация с учетом профиля». arXiv : 1411.6361 . Бибкод : 2014arXiv1411.6361W .
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ Дж. В. Бэкус, Р. Дж. Бибер и др., Система автоматического кодирования на Фортране , Труды Западной объединенной компьютерной конференции, февраль 1957 г., стр. 10. 195
- ^ «К. Петтис, Р. Хансен, Позиционирование кода на основе профиля , Конференция по разработке и реализации языков программирования ACM SIGPLAN, 1990 г.» (PDF) .
- ^ Перейти обратно: а б «Компилятор Intel Fortran 10.1, профессиональная и стандартная версии для Mac OS X» . Архивировано из оригинала 28 сентября 2013 года.
- ^ «Краткий справочник по профильной оптимизации (PGO)» .
- ↑ Создание с помощью оптимизации на основе профиля , mozilla.org, 13 августа 2013 г.
- ^ Перейти обратно: а б Дехао Чен (2010), « Укрощение образцов аппаратных событий для компиляции fdo », Труды 8-го ежегодного международного симпозиума IEEE/ACM по генерации и оптимизации кода , стр. 42–52.
- ^ Иванов Владимир (25 июля 2013 г.). «Обзор JIT-компиляции JVM» . Проверено 10 сентября 2016 г.
- ^ Маршан, Себастьян (31 октября 2016 г.). «Ускорение работы Chrome в Windows с помощью PGO» . Архивировано из оригинала 1 ноября 2016 года . Проверено 1 ноября 2016 г.
- ^ Чен, Дехао; Ли, Дэвид Синьлян; Мозли, Типп (2016). «AutoFDO: автоматическая оптимизация с учетом обратной связи для приложений складского масштаба». Материалы Международного симпозиума по генерации и оптимизации кода 2016 года . Нью-Йорк, штат Нью-Йорк, США. стр. 12–23. дои : 10.1145/2854038.2854044 . ISBN 978-1-4503-3778-6 . S2CID 17473127 .
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ «Оптимизация на основе профиля[VS 2019]» . 18 октября 2022 г.
- ^ «Оптимизация на основе профиля [Руководство пользователя компилятора Clang]» .
- ^ Кинтеро, Дино; Шаброль, Себастьян; Чен, Чи Хуэй; Дхандапани, Мурали; Холлоуэй, Талор; Джадхав, Чандракант; Ким, Сае Ки; Куриан, Сиджо; Радж, Бхарат; Ресенде, Ронан; Роден, Бьёрн; Шринивасан, Ниранджан; Уэйл, Ричард; Занатта, Уильям; Чжан, Чжи; Redbooks, IBM (1 мая 2013 г.). Руководство по производительности IBM Power Systems: внедрение и оптимизация . Красные книги IBM. ISBN 978-0-7384-3766-8 – через Google Книги.
- ^ «Оптимизация собственного исполняемого файла с помощью оптимизации на основе профиля [Руководства по GraalVM]» .
- ^ «Что нового в .NET 6: оптимизация на основе профилей» . 26 мая 2023 г.
- ^ «Оптимизация по профилям» .