通过


在通用 Windows 平台应用中运行配置文件引导式优化

本主题提供将配置文件引导式优化(PGO)应用到通用 Windows 平台(UWP)应用的分步指南。 并非所有桌面应用可用的步骤都可用于 UWP 应用,因此我们的目标是解释合并 PGO 所需的过程,以使 UWP 开发人员更易于和更容易地进行优化。

下面是使用 Visual Studio 2015 Update 3 将 PGO 应用到默认 DirectX 11 应用(UWP)模板的基本演练。

本指南中的屏幕截图基于以下新项目:显示“新建项目”对话框的屏幕截图,其中显示了“已安装 > 模板”> Visual C 加选中,并突出显示了“Direct 11 应用”选项。

将 PGO 应用到 DirectX 11 应用模板:

  1. 将解决方案配置设置为 发布,或者选择一个在其中生成面向发布的优化代码的解决方案配置。 虽然理论上可以在调试版本上运行 PGO,但使用 PGO 以优化一个没有经过优化的版本会没有效果。

App1 窗口

  1. 在项目的属性(属性>C/C++>优化)中确认您是否使用了 /GL 标志进行 整个程序优化(这可能已经在您的配置中设置)。

整个程序优化

  1. 转到链接器属性(属性>链接器>优化),并将 链接时间代码生成 设置为 配置文件引导式优化 - 检测(LTG:PGInstrument)

链接时间代码生成

  1. 选择 “生成解决方案”,然后选择“ 部署解决方案”。

显示“生成”下拉列表的屏幕截图,其中红色箭头指向“生成解决方案”和“部署解决方案”选项。

可以查看生成输出位置,再次验证是否已生成 .pgd 文件,以确保一切工作正常。 在此示例中,这意味着生成输出的同时生成了以下文件:

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

默认情况下,.pgd 文件的名称与可执行文件的名称相同。 您还可以通过更改 配置文件引导式数据库 链接器选项,更改生成的 .pgd 文件的名称。

  1. 导航到 Visual Studio VC 二进制文件目录(默认情况下如下所示 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin)。 对于 x86 可执行文件,复制 pgort140.dll;对于 x64 可执行文件,请从 amd64\pgort140.dll中复制 x64 版本。 将相应的版本 pgort140.dll 粘贴到已部署包的根目录中。 对于此示例,路径为:

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

此步骤是必需的,因为 UWP 应用只能加载其包中存在的库。

文件资源管理器窗口的屏幕截图,其中显示了 AppX 文件夹的内容。

  1. 从“开始”菜单或 Visual Studio “调试”菜单运行应用,并选择 “开始执行但不调试”选项。

显示“调试”下拉列表的屏幕截图,其中突出显示了“开始无调试”选项。

  1. 现在运行的生成已检测并生成 PGO 数据。 此时,您应通过一些最常见的场景运行应用程序以进行优化。 程序运行完预期方案后,在找到相应版本的 pgort140.dll的同一文件夹中找到 pgosweep.exe 工具。 或者,“Visual Studio (x86/x64) Native Tools”命令提示符的路径中已包含相应的版本。 若要收集 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.pgcApp1!UseCase5.pgc,等等。如果以这种方式命名 .pgc 文件,并在生成输出位置与 .pgd 一起命名,则它们在步骤 9 中链接时会自动合并。

  1. 可选:默认情况下,所有在步骤 7 中指定并放置在 .pgd 文件旁边的 .pgc 文件将在链接时合并并权重相等,但您也可以对特定运行的加权方式进行更大的控制。 为了做到这一点,您将使用也位于找到 副本的同一文件夹中的 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 属性页对话框的屏幕截图,显示了配置属性 > 链接器 > 优化,突出显示了链接时间代码生成选项和配置文件引导优化 - 优化 L T C G:P G 优化选项。

  1. 生成项目后,链接器将调用 pgomgr.exe 将任何 <PGDName>!*.pgc 文件合并到默认权重为 1 的 .pgd 中,生成的应用程序将基于分析数据进行优化。

另请参阅