Profile-guided optimization

Profile-guided optimization

Profile-guided optimization (PGO) — техника оптимизации программы компилятором, нацеленная на увеличение производительности выполнения программы. В отличие от традиционных способов оптимизации, анализирующих исключительно исходные коды, PGO использует результаты измерений тестовых запусков оптимизируемой программы для генерации более оптимального кода. Тестовые запуски выявляют, какие части программы исполняются чаще, а какие реже. Преимущество такого подхода в том, что компилятор не строит предположений при выборе способа оптимизации, а использует реальную статистику, собранную во время выполнения программы. Необходимо учитывать, что тестовые запуски программы должны выполнятся по наиболее типичному сценарию, чтобы статистика была репрезентативной, иначе производительность программы может даже ухудшаться.

Среди оптимизаций, которые могут использовать статистику, собранную при помощи PGO[1]:

  • Inlining — например, если функция A часто вызывает функцию B, и функция B достаточна мала, тогда функция B встраивается в A. Это делается на основе реальной статистики запусков программы.
  • Virtual Call Speculation  — если виртуальный вызов или вызов через функцию-указатель часто указывает на конкретную функцию, то он может быть заменён на условно-прямой (срабатывающий при выполнении условия) вызов конкретной функции, и функция может быть даже встроена (inline).
  • Register Allocation — оптимизация распределения регистров на основе собранных данных.
  • Basic Block Optimization — эта оптимизация позволяет поместить совместно вызываемые блоки кода в общую страницу памяти, что минимизирует количество используемых страниц и перерасход памяти.
  • Size/Speed Optimization  — функции, в которых программа тратит значительную часть времени, могут быть оптимизированы по скорости выполнения.
  • Function Layout  — на основании графа вызовов функции, принадлежащие одной цепочке исполнения, будут помещены в одну и ту же секцию.
  • Conditional Branch Optimization — оптимизация ветвлений и switch выражений. На основе тестовых запусков PGO помогает определить, какие условия в switch выражении выполняются чаще других. Эти значения затем могут быть вынесены из switch выражения. То же самое относится к if/else: компилятор может упорядочить ветви на основании данных о том, какая из них вызывается чаще.
  • Dead Code Separation  — код, который не вызывался во время тестовых запусков, может быть перемещён в специальную секцию, чтобы исключить его попадание в часто используемые страницы памяти.
  • EH Code Separation — код обработки исключения, выполняющийся в исключительных случаях, может быть перенесён в отдельную секцию, если возможно определить, что исключения срабатывают в конкретно определённых условиях.
  • Memory Intrinsics — функции для работы с памятью, такие как memset, memcpy и другие, могут быть встроены либо оптимизированы для наиболее частого размера блоков.

Реализации

Техники оптимизации PGO реализованы, в частности, компиляторами: Intel C++ Compiler, Inter Fortran Compiler, GCC, Sun Studio, Microsoft Visual C++.

Примечания

  1. Profile-Guided Optimizations

См. также


Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Полезное


Смотреть что такое "Profile-guided optimization" в других словарях:

  • Compiler optimization — is the process of tuning the output of a compiler to minimize or maximize some attributes of an executable computer program. The most common requirement is to minimize the time taken to execute a program; a less common one is to minimize the… …   Wikipedia

  • Intel C++ Compiler — Esta página o sección está siendo traducida del idioma inglés a partir del artículo Intel C++ Compiler, razón por la cual puede haber lagunas de contenidos, errores sintácticos o escritos sin traducir. Puedes colaborar con Wikipedia …   Wikipedia Español

  • Intel C++ Compiler — (also known as icc or icl) describes a group of C/C++ compilers from Intel. Compilers are available for Linux, Microsoft Windows and Mac OS X.Intel supports compilation for its IA 32, Intel 64, Itanium 2, and XScale processors. The Intel C++… …   Wikipedia

  • Just-in-time compilation — In computing, just in time compilation (JIT), also known as dynamic translation, is a method to improve the runtime performance of computer programs. Historically, computer programs had two modes of runtime operation, either interpreted or static …   Wikipedia

  • Swiftweasel — Infobox Software name = Swiftweasel author = developer = SticKK latest release version = 3.0.3 latest release date = Oct 5, 2008 operating system = Linux genre = Web browser license = MPL 1.1 website = [http://swiftweasel.tuxfamily.org/… …   Wikipedia

  • GNU Compiler Collection — Cc1 redirects here. For other uses of CC1 or CC 1, see CC1 (disambiguation). GNU Compiler Collection Developer(s) GNU Project Initial release May 23, 1987 ( …   Wikipedia

  • List of computing and IT abbreviations — This is a list of computing and IT acronyms and abbreviations. Contents: 0–9 A B C D E F G H I J K L M N O P Q R S T U V W X Y …   Wikipedia

  • Mozilla Firefox — 8 unter Windows 7 …   Deutsch Wikipedia

  • История Mozilla Firefox — Объединить Mozilla Firefox …   Википедия

  • История Firefox — Firefox (категория) Mozilla Foundation • Corporation Описание Особенности • Расширения (категория) Spread Firefox • Принятие рынком Смотрите также Gnuzilla • GNU IceCat • IceApe IceDove • Portable Ed. • Miro • …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»