桌面應用程式的設定檔引導最佳化

剖析資料導向最佳化(PGO)是一種編譯器最佳化技術,會利用執行階段的剖析資料來產生效率更高的原生程式碼。 使用 PGO 時,編譯器會根據應用程式實際執行方式重新排列程式碼,從而提升指令快取的利用率、更小的程式碼大小以及更快的執行速度。

Important

桌面版 Windows 應用程式 SDK 應用程式使用標準的 MSVC PGO 工作流程。 與 UWP 應用程式不同,桌面應用程式不需要手動複製 pgort140.dll 到應用程式套件中——PGO 執行時函式庫可透過標準的 C/C++ 執行環境取得。

PGO 運作方式

PGO 是一個三步驟流程:

  1. 樂器 — 啟用儀器功能來建立你的應用程式。 編譯器會插入探測,記錄你的程式碼執行情況。
  2. 設定檔 — 執行儀器化應用程式,練習你最重要的情境。 資料分析資料會被儲存到 .pgc 檔案中。
  3. 優化 — 利用分析資料重建你的應用程式。 編譯器會根據實際執行時的行為來優化程式碼排版、內嵌與分支。

步驟指南

1. 設定釋放

將你的解決方案設定設為 Release (或其他能產生最佳化程式碼的設定)。 PGO 在除錯建置中沒有優勢。

2. 啟用整個程式的最佳化

在你的專案屬性中,進入 C/C++>Optimization,確認 Whole Program Optimization/GL () 是否啟用。

3. 為建構進行儀器化

前往 連結>器優化 ,並將 連結時間碼產生 設定為 配置導向優化工具/LTCG:PGInstrument)。

組建您的解決方案。 系統會隨著您的建置輸出一併產生一個 .pgd 檔案。

4. 啟動你的應用程式並收集個人資料

執行你的應用程式,並練習你想要優化的情境——啟動、導航、資料處理,或任何對效能至關重要的工作流程。 應用程式運行時,使用 pgosweep.exe MSVC工具組內建的工具來收集分析資料:

pgosweep.exe MyApp.exe MyApp!Scenario1.pgc

你可以為不同情境收集多個 .pgc 檔案。

5. 合併個人資料(可選)

預設會在最佳化步驟中自動合併所有放在 .pgd 檔案旁邊的 .pgc 檔案。 要對某些情境做不同的權重,請使用以下 pgomgr.exe 工具:

pgomgr.exe -merge:3 MyApp!CoreScenario.pgc MyApp.pgd

這會使 CoreScenario 執行作業的優先順序提高為其他執行作業的三倍。

6. 優化建構

回到 連結>器優化 ,並將 連結時間碼生成 設為 設定檔導向優化 - 優化/LTCG:PGOptimize)。

重建解決方案。 連結器會自動合併所有 .pgc 檔案,並根據分析資料產生優化的二進位檔。

有效運用 PGO 的技巧

  • 刻畫真實情境。 PGO 優化的品質取決於你的分析流程有多具代表性。 練習使用者實際會遇到的程式碼路徑。
  • 合併多次執行結果。 從多種不同使用情境收集分析資料,涵蓋廣泛的程式碼路徑。
  • 在程式碼有重大變更時,重新進行效能分析。 當你對程式碼庫做重大修改時,設定檔資料就會變得過時。 定期重新儀器和重新剖面。
  • 衡量影響。 比較 PGO 前後的啟動時間、吞吐量與記憶體使用情況,以驗證優化的價值。