Поддержка оптимизации на основе профиля была представлена в AGDE версии 22.2.71.
Поиск настроек PGO
Откройте настройки проекта из Solution Explorer.
Рис. 1. Окно обозревателя решений Visual Studio.
Убедитесь, что для вашей платформы установлена конфигурация Android (например, Android-arm64-v8a ).
На левой панели выберите «Свойства конфигурации» > «Общие» . Найдите группу свойств под названием PGO .
Рисунок 2. Диалоговое окно «Свойства проекта».
Включить сборки с поддержкой PGO в проекте
Добавьте в свой проект новую конфигурацию под названием Instrumented . Это основано на конфигурации, которую вы используете во время разработки для тестирования, которая должна быть вашей традиционной оптимизированной сборкой (вы все равно можете включить дополнительные функции отладки, пока сохраняете настройки оптимизации компилятора).
Нажмите «Диспетчер конфигураций…» в диалоговом окне страницы свойств.
Рисунок 3: Диалоговое окно Configuration Manager.
В диалоговом окне «Диспетчер конфигураций» выберите раскрывающийся список «Конфигурация активного решения» и выберите <Создать…> .
Рисунок 4. Создание новой конфигурации сборки.
… и создайте новую конфигурацию, оснащенную PGO.
Рисунок 5: Диалоговое окно конфигурации нового решения.
Чтобы включить сборку в режиме PGO-Instrumented и создать профиль для своей игры, выберите «Инструментированный» в списке опций для параметра «Режим оптимизации на основе профиля» .
Рис. 6. Диалоговое окно «Свойства проекта», в котором выделены настройки PGO.
Для параметра «Профили оптимизации по профилю» введите путь к папке, в которую будет записываться файл необработанных выходных данных профиля на вашем устройстве Android. Обычно это значение должно иметь вид /data/data/<package name>/cache/
, где <package name>
это полное имя пакета вашего APK, например com.google.sample.tunnel .
Более подробную информацию о том, как это работает, можно найти в документации Clang .
Запись данных профиля с поддержкой PGO на ваше устройство
Данные PGO обычно записываются на устройство инструментальной системой PGO при выходе из процесса. На Android приложения не закрываются — они всегда закрываются. Это означает, что функция записи на диск по умолчанию никогда не срабатывает, поэтому вашему приложению требуется записывать данные PGO вручную.
В вашем приложении вы должны явно вызвать __llvm_profile_write_file
, чтобы записать данные профиля. Этот символ доступен только при сборке сборки с использованием PGO. Чтобы упростить это, мы рекомендуем использовать следующий шаблон при прямом объявлении __llvm_profile_write_file
.
#ifdef PGO_INSTRUMENT
extern "C" int __llvm_profile_write_file(void);
#else
extern "C" int __llvm_profile_write_file(void) { return 0; }
#endif
Вызов этой функции записывает данные профиля в папку, указанную вами ранее.
Выполнение прогона профиля
Чтобы создать профиль, вы запускаете APK, созданный с помощью инструментов PGO, на целевом устройстве. После того как вы выполнили код и вызвали вызов функции __llvm_profile_write_file
, ваше приложение запишет данные профиля в хранилище.
На этом этапе скопируйте профили обратно с устройства для использования компилятором.
Подготовка данных профиля для использования компилятором
При изолированном использовании инструмент командной строки llvm-profdata
, который поставляется как часть Clang/LLVM в Android NDK, используется для подготовки файлов данных профиля для использования компилятором во время оптимизации сборки на основе профиля.
AGDE автоматически выполняет этот шаг за вас, объединяя все файлы данных профиля, которые вы добавили в свой проект, и используя их, когда для параметра «Режим оптимизации на основе профиля» на страницах свойств проекта установлено значение «Оптимизировано» .
Создание проекта с включенной оптимизацией на основе профиля
Теперь, когда вы сохранили свои профили и добавили их в свой проект, компилятор может использовать эти данные для точной настройки оптимизации вашей сборки.
Создайте новую конфигурацию проекта для вашей сборки, оптимизированной для PGO, чтобы вы могли выполнять сборку в этом режиме только тогда, когда это необходимо.
Рисунок 7. Создание новой конфигурации сборки, оптимизированной для PGO.
Установите для параметра «Режим оптимизации на основе профиля» на страницах свойств проекта значение «Оптимизированный» .
Рис. 8. Установка режима оптимизации PGO на «Оптимизированный».
Скопируйте файлы с устройства и добавьте их в свой проект в обозревателе решений. Эти файлы данных профиля подбираются компилятором при следующем построении конфигурации, оптимизированной для PGO, и используются для настройки того, как компилятор оптимизирует ваш код.
Вы можете скопировать файлы данных профиля в свой проект с устройства с помощью ADB или с помощью Android Device Explorer.
Использование оптимизации на основе профиля вне AGDE
Если вы используете систему сборки, которая не поддерживается AGDE, вам может потребоваться напрямую отредактировать сборку. В документации Clang описаны необходимые ключи — -fprofile-generate
и -fprofile-use
.
Если вы используете в своей игре промежуточный движок, обратитесь к документации вашего движка, чтобы узнать, как включить PGO (если он поддерживается).