在 Visual Studio 中配置配置文件引导优化

配置文件引导优化支持在 AGDE 版本 22.2.71 中引入。

查找 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的新配置。这基于您在开发期间用于测试的配置,这应该是您传统的优化构建(只要您保留编译器优化设置,您仍然可以启用其他调试功能)。

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

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 检测配置。

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

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

要启用以 PGO 检测模式构建,以便您可以为游戏生成配置文件,请从配置文件引导优化模式设置的选项列表中选择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 设置。

对于配置文件引导优化配置文件设置,请输入路径以将原始输出配置文件数据文件写入 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

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

执行配置文件运行

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

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

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

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

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

使用启用了配置文件引导优化的功能构建您的项目

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

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

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

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 优化配置时,编译器会拾取这些配置文件数据文件,并用于调整编译器优化代码的方式。

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

在 AGDE 之外使用配置文件引导优化

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

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