共用方式為


特性指引最佳化

配置檔引導優化 (PGO) 可讓您優化整個可執行檔,其中優化器會使用來自.exe或.dll檔案測試回合的數據。 數據代表生產環境中程式可能效能。

配置檔引導優化僅適用於 x86、x64 或 ARM64 原生目標。 配置文件引導優化不適用於在 Common Language Runtime 上執行的可執行檔。 即使您產生具有混合原生和 Managed 程式代碼的元件(使用 /clr 編譯程式選項),您也無法只對原生程式代碼使用設定檔引導優化。 如果您嘗試在 IDE 中設定這些選項來建置專案,則會產生建置錯誤。

注意

從分析測試回合收集的資訊會覆寫在您指定 /Ob/Os/Ot 時會生效的優化。 如需詳細資訊,請參閱 /Ob (內嵌函式擴充)/Os、/Ot (偏好小型程式碼、偏好快速程式碼)。

優化應用程式的步驟

若要使用設定檔引導式優化,請遵循下列步驟來優化您的應用程式:

  • 使用 /GL 編譯一或多個原始程式碼檔案。

    使用 /GL 建置的每個模組都可以在配置檔引導優化測試回合期間檢查,以擷取運行時間行為。 配置檔引導優化組建中的每個模組都不需要使用 /GL 進行編譯。 不過,只有使用 /GL 編譯的模組會經過檢測,稍後才能用於分析引導優化。

  • 使用 /LTCG/GENPROFILE 或 /FASTGENPROFILE 的連結。

    在執行已檢測的應用程式時,同時使用 /LTCG/GENPROFILE/FASTGENPROFILE 建立 .pgd 檔案。 將測試回合數據新增至 .pgd 檔案之後,就可以做為下一個連結步驟的輸入(建立優化映像)。 指定 /GENPROFILE 時,您可以選擇性地新增PGD=filename 自變數來指定檔案的非預設名稱或位置.pgd /LTCG/GENPROFILE/FASTGENPROFILE 連結器選項的組合會取代已被取代的 /LTCG:PGINSTRUMENT 連結器選項。

  • 分析應用程式。

    每次剖析的EXE會話結束時,或卸除已分析的 DLL 時,都會建立檔案 appname!N.pgc 。 檔案 .pgc 包含特定應用程式測試回合的相關信息。 appname 是您的應用程式名稱,而 N 是從 1 開始的數位,會根據目錄中的其他 appname!N.pgc 檔案數目遞增。 如果測試回合不代表您想要優化的案例,您可以刪除 .pgc 檔案。

    在測試回合期間,您可以強制關閉目前開啟.pgc的檔案,並使用pgosweep公用程式建立新.pgc檔案(例如,當測試案例結尾與應用程式關閉不一致時)。

    您的應用程式也可以直接叫用 PGO 函式 PgoAutoSweep,以擷取呼叫點的配置檔數據作為 .pgc 檔案。 它可讓您更精細地控制檔案 .pgc 中擷取的數據所涵蓋的程序代碼。 如需如何使用此函式的範例,請參閱 PgoAutoSweep 檔。

    當您建立已檢測的組建時,根據預設,數據收集會以非線程安全模式完成,速度較快,但可能不精確。 藉由使用 EXACT 自變數至 /GENPROFILE 或 /FASTGENPROFILE,您可以在安全線程模式中指定數據收集,更精確,但速度較慢。 如果您設定已取代的 PogoSafeMode 環境變數,或建立檢測組建時已被 取代的 /POGOSAFEMODE 連結器選項,也可以使用此選項。

  • 使用 /LTCG/USEPROFILE 的連結。

    使用 /LTCG/USEPROFILE 連結器選項來建立優化的映像。 此步驟會採用 作為檔案的 .pgd 輸入。 當您指定 /USEPROFILE 時,可以選擇性地新增PGD=filename自變數來指定檔案的非預設名稱或位置。.pgd 您也可以使用已被取代 的 /PGD 連結器選項來指定此名稱。 /LTCG/USEPROFILE 的組合會取代已被取代的 /LTCG:PGOPTIMIZE/LTCG:PGUPDATE 連結器選項。

甚至可以建立優化的可執行檔,稍後判斷建立更優化的映像會很有用。 如果檢測的映像及其.pgd檔案可供使用,您可以使用相同的 /LTCG/USEPROFILE 鏈接器選項,執行其他測試回合,並使用較.pgd新的檔案重建優化映像。

注意

.pgc.pgd 檔案都是二進位檔類型。 如果儲存在原始檔控制系統中,請避免對文本檔進行任何自動轉換。

PGO 所執行的優化

以設定檔案引導的優化包括下列檢查和改進:

  • 內嵌 - 例如,如果函式 A 經常呼叫函式 B,而函式 B 相對較小,則分析引導優化會在函式 A 中內嵌函式 B。

  • 虛擬呼叫猜測 - 如果虛擬呼叫或其他透過函式指標呼叫,通常會以特定函式為目標,則以配置檔引導優化可以插入經常目標函式的有條件式直接呼叫,而直接呼叫可以內嵌。

  • 註冊配置 - 根據配置檔數據優化會導致更好的註冊配置。

  • 基本區塊優化 - 基本區塊優化 允許一般執行的基本區塊,這些區塊會暫時在指定的框架內執行,以放在相同頁面集(地區性)。 它會將所使用的頁面數目降至最低,以將記憶體額外負荷降到最低。

  • 大小/速度優化 - 程序花費最多運行時間的函式可以針對速度進行優化。

  • 函式配置 - 根據呼叫圖形和已分析的呼叫端/被呼叫端行為,通常會沿著相同執行路徑的函式放在相同的區段中。

  • 條件式分支優化 - 使用值探查時,剖析引導式 優化可以發現參數語句中的指定值是否比其他值更常使用。 然後此值會撤出 switch 陳述式。 您可以使用 ... 指示來完成if相同的作業,其中優化器可以排序 if...elseif以便先放置 或 else 區塊,視哪個區塊比較頻繁。else

  • 無效的程式代碼分離 - 在分析期間未呼叫的程式代碼會移至附加至區段集結尾的特殊區段。 它有效地將本節保留在常用頁面外。

  • EH 程式代碼區隔 - 因為 EH 程式代碼只會特別執行,所以通常可以移至個別區段。 當分析引導優化可以判斷例外狀況只會發生例外狀況時,就會移動它。

  • 記憶體內部 函數 - 是否要擴充內部函數,取決於其是否經常呼叫。 內建也可以根據移動或複製的區塊大小進行最佳化。

下一步

深入瞭解您可以在設定檔引導優化中使用的這些環境變數、函式和工具:

配置文件引導式優化的環境變數
這些變數用來指定測試案例的運行時間行為。 它們現在已被取代,並取代為新的連結器選項。 本文件說明如何將環境變數移至連結器選項。

PgoAutoSweep
您可以新增至應用程式的函式,以提供精細的 .pgc 檔案數據擷取控件。

pgosweep
命令行公用程式,會將所有配置檔數據 .pgc 寫入檔案、關閉 .pgc 檔案,然後開啟新的 .pgc 檔案。

pgomgr
命令行公用程式,可將配置檔數據從一或多個 .pgc 檔案新增至 .pgd 檔案。

如何:將多個 PGO 設定檔合併成單一配置檔
pgomgr 使用方式的範例。

另請參閱

其他 MSVC 建置工具