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


Запуск интерактивной оптимизации профилей для приложений универсальной платформы Windows

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

Ниже приведено базовое пошаговое руководство по применению PGO к шаблону приложения DirectX 11 (UWP) по умолчанию с помощью Visual Studio 2015 с обновлением 3.

Снимок экрана, приведенный в этом руководстве, основан на следующем проекте: снимок экрана: диалоговое окно

Чтобы применить PGO к шаблону приложения DirectX 11:

  1. Установите конфигурацию решения на релиз или выберите конфигурацию решения, где создается оптимизированный код, предназначенный для релиза. Хотя вы могли бы теоретически запустить PGO в отладочной сборке, это будет неэффективно использовать PGO для оптимизации другой неоптимизированной сборки.

окно App1

  1. Проверьте в свойствах вашего проекта (свойства>C/C++>Оптимизация), что вы используете флаг /GL для Оптимизации всей программы (это может быть уже задано вашей конфигурацией).

оптимизация всей программы

  1. Перейдите в свойства компоновщика (Свойства>Компоновщик>Оптимизация) и задайте Генерацию кода во время компоновки на Оптимизация, управляемая профилем — инструмент (LTCG:PGInstrument).

линковка времени генерации кода

  1. Выберите Сборка решения, а затем выберите Развертывание решения.

Снимок экрана, показывающий выпадающий список сборки с красными стрелками, указывающими на параметры

Вы можете дважды проверить правильность работы всего, просмотрев расположение выходных данных сборки и убедившись, что PGD-файл был создан. В этом примере это означает, что следующий файл был создан вместе с выходными данными сборки:

C:\Users\<USER>\Documents\Visual Studio 2015\Projects\App1\Release\App1\App1.pgd

По умолчанию PGD-файл будет иметь то же имя, что и исполняемый файл. Вы также можете изменить имя файла .pgd, созданного путем изменения параметра линковщика Profile Guided Database.

  1. Перейдите в каталог двоичных файлов Visual Studio VC (по умолчанию это выглядит как C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin). Для исполняемых файлов x86 скопируйте pgort140.dll; для исполняемых файлов x64 скопируйте версию x64 из amd64\pgort140.dll. Вставьте соответствующую версию pgort140.dll в корень развернутого пакета. Для этого примера используется следующий путь:

C:\Users\<USER>\Documents\Visual Studio 2015\Projects\App1\Release\App1\AppX\

Этот шаг необходим, так как приложения UWP могут загружать только библиотеки, существующие в их пакете.

снимок экрана окна Проводника с содержимым папки AppX.

  1. Запустите приложение из меню "Пуск" или из меню "Отладка" Visual Studio с параметром "Запуск без отладки".

снимок экрана: раскрывающийся список отладки с выделенным параметром

  1. Сборка, которая сейчас выполняется, проходит инструментирование и генерирует данные для PGO (Profile-Guided Optimization). На этом этапе необходимо запустить приложение с помощью некоторых наиболее распространенных сценариев, которые планируется оптимизировать. После того как программа выполнит предусмотренные сценарии, найдите средство pgosweep.exe, расположенное в той же папке, где находится соответствующая версия pgort140.dll. В качестве альтернативы, в командной строке инструментария Visual Studio (x86/x64) уже будет необходимая версия в переменной среды PATH. Чтобы собрать данные PGO, выполните следующую команду, пока приложение по-прежнему работает для создания PGC-файла, содержащего данные профилирования:

pgosweep.exe <executable name> <output file>

Вы также можете просмотреть pgosweep.exe справку (pgosweep.exe /help), чтобы увидеть другие необязательные аргументы для настройки сбора данных PGO.

Рекомендуется вывести PGC-файлы в расположение сборки, где находится PGD, а также назовите файлы <PGDName>!<RunIdentifier>.pgc. В этом примере это означает:

pgosweep.exe App1.exe "C:\Users\<USER>\Documents\Visual Studio 2015\Projects\App1\Release\App1\App1!1.pgc"

Дальнейшая обработка может также включать App1!CoreScenario.pgc, App1!UseCase5.pgcи т. д. Если файлы .pgc названы таким образом и находятся в выходной директории сборки вместе с .pgd, они будут автоматически объединены при связывании на шаге 9.

  1. НЕОБЯЗАТЕЛЬНО. По умолчанию, все файлы PGC с именами, указанными на шаге 7 и размещенные рядом с файлами PGD, будут объединены при связывании и взвешены одинаково, но вы также можете иметь больший контроль над тем, как оцениваются отдельные запуски. Для этого вы будете использовать инструмент pgomgr.exe, который также находится в той же папке, где вы впервые нашли копию pgort140.dll. Например, чтобы объединить запуск CoreScenario с приоритетом в 3 раза выше, чем у остальных запусков, можно использовать следующую команду:
pgomgr.exe -merge:3 "C:\Users\<USER>\Documents\Visual Studio 2015\Projects\App1\Release\App1\App1!CoreScenario.pgc" "C:\Users\<USER>\Documents\Visual Studio 2015\Projects\App1\Release\App1\App1.pgd"
  1. Создав один или несколько PGC-файлов и поместив их вместе с PGD или вручную объединяя их (шаг 8), теперь можно использовать компоновщик для создания окончательно оптимизированной сборки. Вернитесь в свойства компоновщика (Свойства>Компоновщик>Оптимизация) и установите Генерация кода во время компоновки на Профилированная оптимизация - Оптимизация (LTCG:PGOptimize) и убедитесь, что профилированная база данных указывает на .pgd, которую вы планируете использовать (если вы это не изменяли, всё должно быть в порядке).

Снимок экрана диалогового окна

  1. Теперь при построении проекта компоновщик вызовет pgomgr.exe для объединения всех файлов <PGDName>!*.pgc в .pgd с весом по умолчанию 1, и итоговое приложение будет оптимизировано на основе данных профилирования.

См. также