在Visual Studio中配置Profile-Guided Optimization

AGDE 22.2.71版本中引入了Profile-Guided Optimization支持。

查找PGO设置

从解决方案资源管理器打开您的项目设置。

The Visual Studio Solution explorer properties menu for the current
project.

图1:Visual Studio解决方案资源管理器窗口。

确保您的平台设置为Android配置(例如,Android-arm64-v8a)。

在左侧面板中,选择配置属性>常规。查找名为PGO的属性组。

The project properties dialog with General properties shown, and PGO settings
highlighted

图2:项目属性对话框。

在项目中启用PGO-Instrumented构建

为您的项目添加一个名为Instrumented的新配置。这基于您在测试期间开发中使用的配置,这应该是您传统的优化版本(只要保留编译器优化设置,您仍然可以启用其他调试功能)。

单击属性页对话框中的配置管理器…

The top of the Property Pages dialog, showing the Active Solution
Configuration and Platform drop-downs, and the Configuration Manager
button

图3:配置管理器对话框。

在配置管理器对话框中,选择活动解决方案配置下拉菜单并选择<新建…>

The Configuration Manager dialog, with the Active Solution Configuration
drop-down opened and the New option
highlighted.

图4:创建新的构建配置。

… 并创建一个新的PGO-Instrumented配置。

The New Solution Configuration dialog, creating a new PGO-Instrumented build
configuration based on the existing Release build
configuration

图5:新的解决方案配置对话框。

要启用PGO-Instrumented模式下的构建,以便您可以为您的游戏生成配置文件,请从Profile-Guided Optimization Mode设置的选项列表中选择Instrumented

The Project Properties dialog, opened to the General settings, with the PGO
settings shown, and the Profile Guided Optimization mode set to
Instrumented.

图6:项目属性对话框,突出显示PGO设置。

对于Profile Guided Optimization Profiles设置,输入路径到在您的Android设备上写入原始输出配置文件数据的文件夹。通常此值应类似于/data/data/<package name>/cache/ – 其中<package name>是您的APK的完整包名 – 例如,com.google.sample.tunnel

有关此工作原理的更深入信息,请参阅Clang文档

将PGO-Instrumented配置文件数据写入您的设备

PGO数据通常在进程退出时由PGO检测系统写入设备。在Android上,应用程序不会退出——它们始终会被终止。这意味着默认的“写入磁盘”功能从未触发,要求您的应用程序手动写入PGO数据。

您的应用程序应显式调用__llvm_profile_write_file来写入配置文件数据。此符号仅在构建PGO-Instrumented版本时可用。为了简化操作,我们建议在向前声明__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

调用此函数会将配置文件数据写入您之前指定的文件夹。

执行概要分析运行

要生成配置文件,请在目标设备上运行使用PGO检测构建的APK。在您满意地运行代码并触发对__llvm_profile_write_file函数的调用后,您的应用程序会将配置文件数据写入存储。

此时,将配置文件复制回设备以供编译器使用。

准备供编译器使用的配置文件数据

当单独使用时,作为Android NDK中Clang/LLVM一部分提供的命令行工具llvm-profdata用于准备配置文件数据文件,以便在构建的概要引导优化期间供编译器使用。

AGDE会自动执行此步骤,方法是将您添加到项目中的任何配置文件数据文件合并在一起,并在项目属性页中的Profile-Guided Optimization Mode设置为Optimized时使用它们。

使用启用Profile-Guided Optimization的构建项目

现在您已经捕获了配置文件并将其添加到项目中,编译器可以使用这些数据来微调构建的优化。

为您的PGO-Optimized构建创建一个新的项目配置,以便仅在需要时才以这种模式构建。

The New Solution Configuration dialog creating a build configuration based on
the Release build, but this time with PGO-Optimized as the new build
configuration name.

图7:创建新的PGO-Optimized构建配置。

将项目属性页中的Profile-Guided Optimization Mode设置为Optimized

The Project Properties dialog, opened to the General settings, with the PGO
settings shown, and the Profile Guided Optimization mode set to
Optimized

图8:将PGO优化模式设置为Optimized。

从设备复制文件并将其添加到解决方案资源管理器中的项目中。下次构建PGO-Optimized配置时,编译器会拾取这些配置文件数据文件,并将其用于调整编译器优化代码的方式。

您可以使用ADB或Android设备资源管理器将配置文件数据文件从设备复制到您的项目中。

在AGDE外部使用Profile-Guided Optimization

如果您使用的是AGDE不支持的构建系统,您可能需要直接编辑您的构建。Clang的文档涵盖了必要的开关——-fprofile-generate-fprofile-use

如果您正在为您的游戏使用中间件引擎,请查阅您的引擎的文档以了解如何启用PGO(如果支持)。