Используя профиль ведомая оптимизация

Profile Guided Optimization (PGO) является расширенной функцией для скручивания каждого последнего бита производительности из Вашего приложения. Это не трудно использовать, но требует, чтобы некоторые дополнительные шаги сборки и некоторый уход собрали хорошую информацию профиля. В зависимости от природы кода Вашего приложения PGO может улучшить производительность на 5 - 10 процентов, но не все приложения получит преимущества от него. Если у Вас есть чувствительный к производительности код, которому нужна та дополнительная оптимизация, PGO может быть в состоянии помочь.

Когда использовать PGO

Компилятор LLVM уже выполняет хорошую работу оптимизации по умолчанию — PGO обеспечивает дальнейшее совершенствование для высоко производительности чувствительный код. PGO и другая оптимизация компилятора не являются заменой для записи эффективного кода. Безусловно самая важная вещь, которую можно сделать для улучшения производительности, состоит в том, чтобы использовать правильные алгоритмы и избежать неэффективности в коде. После того, как Вы уже сделали это, и когда Вы хотите попытаться получить еще больше производительности, которая является временем для рассматривания использование PGO.

Как работает PGO

PGO предполагает, что Ваше приложение ведет себя очевидно, такое, что представительный профиль может получить будущее поведение для всех чувствительных к производительности аспектов кода. При включении PGO XCode создает специально инструментованную версию приложения и затем выполняет его. Можно или вручную осуществить приложение или использовать тесты XCTest для осуществления приложения для Вас.

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

Вы хотите собрать профиль поведения типового приложения при генерации профиля оптимизации. Количества PGO, сколько раз каждый оператор выполняет и создает профиль, моделируя то поведение. Компилятор LLVM тогда использует ту информацию о профиле для фокусирования усилий по оптимизации на самом важном коде, т.е. код, работающий наиболее часто в поведении типового приложения и использовании.

Тестирование увеличения производительности

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

Законность профиля и регенерация

Поскольку Вы изменяете свое приложение, периодически регенерируете данные профиля. Поскольку данные профиля связаны с определенными операторами в Вашем коде, компилятор может не быть в состоянии использовать его, когда изменяются те операторы. Компилятор выпускает предупреждения сборки, когда это, оказывается, напоминает Вам регенерировать профиль.

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

Ограничения и протесты

XCode поддерживает только единственный профиль для PGO. Если Ваш проект создает для многократной архитектуры, у Вас может все еще быть только единственный профиль. Для большей части кода количества выполнения уровня оператора будут подобны через различную архитектуру и цели. Если у Вас есть код, настраивающийся для архитектурно-зависимых версий, профиль содержит данные только для архитектуры, где профиль был собран, и можно видеть предупреждения от компилятора о недостающих данных при создании для другой архитектуры. Эти предупреждения безопасны — собирают профиль на основной архитектуре так, чтобы оптимизация работала лучше всего там.

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