Поделиться через


Профильная оптимизация

Профильная оптимизация позволяет оптимизировать выходной файл. Для этого в оптимизаторе используются данные тестовых запусков EXE-файла или DLL-файла.В этих данных представлен наиболее вероятный процесс выполнения программ в рабочей среде.

Профильная оптимизация доступна только для основных платформ: x86, семейства процессоров Itanium Processor Family (IPF) или x64.Профильные оптимизации недоступны для выходных файлов, которые будут выполняться в среде CLR.Даже в случае сборки со смешанным машинным и управляемым кодом (скомпилированной с помощью /clr), профильную оптимизацию нельзя использовать в машинном коде.Профильные оптимизации также не поддерживаются для приложений Windows Магазина.При попытке построения проекта, эти параметры, установленые в интегрированной среде разработки, то возникает ошибка построения приведет к.

ПримечаниеПримечание

Сведения, собранные из тестовых запусков профилирования, переопределяют оптимизации, которые в противном случае были бы задействованы в случае указания /Ob, /Os или /Ot.Дополнительные сведения см. в разделах Параметр /Ob (расширение встроенных функций) и /Os, /Ot (приоритет размера кода или скорости кода).

Ниже приведены общие сведения о процессе использования профильных оптимизаций:

  • Скомпилируйте один или несколько файлов исходного кода при помощи /GL.

    Каждый модуль, построенный с помощью /GL, может быть проанализирован во время профильной оптимизации, чтобы отследить поведение во время выполнения.Нет необходимости компилировать с помощью /GL каждый модуль в построении профильной оптимизации.Однако только те модули, которые скомпилированы с помощью /GL, будут инструментированы и позднее доступны для профильной оптимизации.

  • Скомпонуйте с /LTCG:PGINSTRUMENT.

    С помощью /LTCG:PGINSTRUMENT создается PGD-файл.После добавления данных тестового запуска в PGD-файл, этот файл может использоваться как входящий для следующего этапа компоновки (создание оптимизированного изображения).При указании /LTCG:PGINSTRUMENT можно указать /PGD с именем, которое не является именем по умолчанию или расположением PGD-файла.

  • Профилируйте приложение.

    Каждый раз по окончании профилированного сеанса EXE-файла или выгрузки DLL-файла создается файл appname!#.pgc.PGC-файл содержит сведения об определенных тестовых запусках приложения.# — номер, который начинается с 1 и увеличивается в зависимости от числа других файлов appname!#.pgc в каталоге.Можно удалить PGC-файл в случае, если тестовый запуск не представляет скрипт, который следует оптимизировать.

    Во время тестового запуска можно форсировать закрытие открытого в текущий момент PGC-файла и создание нового PGC-файла служебной программой pgosweep (например, если конец тестового скрипта не совпадает с завершением работы приложения).

    Параметр PogoSafeMode можно использовать при профилировании приложения.Он позволяет указывать, в каком режиме следует выполнять профилирование: быстром или безопасном.Дополнительные сведения о режимах профилирования см. в разделе PogoSafeMode.

  • Скомпонуйте с /LTCG:PGOPTIMIZE.

    С помощью /LTCG:PGOPTIMIZE создается оптимизированное изображение.На этом этапе в качестве входного принимается PGD-файл.Дополнительные сведения см. в разделе /LTCG:PGOPTIMIZE.

Можно даже создать оптимизированный выходной файл, и затем определить, какое дополнительное профилирование будет полезно для создания более оптимизированного изображения.Если инструментированное изображение и соответствующий PGD-файл доступны, можно выполнить дополнительные тестовые запуски и повторное построение оптимизированного изображения с более новым PGD-файлом.

Ниже приведен список профильных оптимизаций:

  • Встраивание — Например, если существует функция A, которая часто вызывает функцию B, а функция B является относительно небольшой, то профили оптимизаций встроят функцию B в функцию A.

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

  • Распределение регистров — Оптимизация с результатами данных профиля при лучшем распределении регистров.

  • Простая блочная оптимизация — Простая блочная оптимизация, позволяющая обычно выполняемым основным блокам, которые временно выполняются в одном заданном фрейме, разместится в одном наборе страниц (размещении).Это минимизирует число используемых страниц, что способствует минимизации использования памяти.

  • Оптимизация размера/скорости— Функции, на выполнение которых программа затрачивает значительное время, могут быть оптимизированы по скорости.

  • Структура функции— Основана на графе вызовов и поведении профилированного вызывающего/вызываемого объекта; функции, которые часто проходят одинаковый путь выполнения, помещаются в один раздел.

  • Оптимизация условного ветвления — При профильной оптимизации, с помощью проверки значений, выясняется, какое значение в операторе "switch" используется чаще, чем остальные значения.Затем это значение может быть изъято из оператора "switch".То же самое относится к инструкциям "if/else". С помощью оптимизатора выполняется упорядочивание в блоке "if/else", таким образом, что первым помещается тот из блоков "if" или "else", который чаще возвращает "true".

  • Отделение неиспользуемого кода — Код, который не вызывается во время профилирования, перемещается в специальный раздел, добавленный в конец набора разделов.Таким образом, этот раздел эффективно хранится вне страниц, которые часто используются.

  • Отделение кода EH — Код EH, который выполняется в исключительных случаях, можно поместить в отдельный раздел, если с помощью профильной оптимизации установлено, что исключения возникают только при исключительных условиях.

  • Компоненты памяти — Расширение компонентов можно разработать лучше, если возможно определить, как часто вызываются компоненты.Также компоненты могут быть оптимизированы в зависимости от размера блока перемещений или копий.

Для получения дополнительной информации см. Walkthrough: Using Profile-Guided Optimizations.

Содержание

Средства профильной оптимизации

Практическое руководство. Слияние нескольких профилей PGO в единый профиль

См. также

Ссылки

Средства построения С/C++