在 Visual Studio 中調整設定檔引導最佳化功能

AGDE 22.2.71 版已導入設定檔引導最佳化功能的支援機制。

找出 PGO 設定

透過 Solution Explorer 開啟專案設定。

目前專案在 Visual Studio「Solution Explorer」中的「Properties」選單。

圖 1:Visual Studio 的「Solution Explorer」視窗。

確認「Platform」已設為 Android 設定 (例如 Android-arm64-v8a)。

在左側面板中,依序選取「Configuration Properties」>「General」。找出名為「PGO」的屬性群組。

專案的屬性對話方塊,其中顯示「General」屬性,同時醒目顯示「PGO」設定

圖 2:專案的屬性對話方塊。

在專案中啟用 PGO 檢測版本

在專案中新增名為「Instrumented」的新設定。這是以您在開發期間用於測試的設定為依據,也就是傳統的最佳化版本 (只要保留編譯器最佳化設定,還是可以啟用其他偵錯功能)。

在「Property Pages」對話方塊中,按一下「Configuration Manager…」

「Property Pages」對話方塊頂端顯示「Active Solution Configuration」和「Platform」下拉式選單,以及「Configuration Manager」按鈕

圖 3:「Configuration Manager」對話方塊。

在「Configuration Manager」對話方塊中,依序選取「Active solution configuration」下拉式選單 >「<New…>」

「Configuration Manager」對話方塊中的「Active Solution Configuration」下拉式選單已開啟,並且醒目顯示「New」選項。

圖 4:建立新的建構設定。

接下來,建立新的 PGO 檢測設定。

「New Solution Configuration」對話方塊,顯示正在根據現有版本的建構設定,建立新的 PGO 檢測建構設定

圖 5:「New Solution Configuration」對話方塊。

如要在 PGO 檢測模式下啟用建構功能,為遊戲產生設定檔,請從「Profile-Guided Optimization Mode」設定的選項清單中選取「Instrumented」

「Project Properties」對話方塊已開啟「General」設定,其中顯示「PGO」設定,且「Profile Guided Optimization Mode」已設為「Instrumented」。

圖 6:在「Project Properties」對話方塊中醒目顯示「PGO」設定。

在「Profile Guided Optimization Profiles」設定中輸入資料夾路徑,指定要在 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 會自動執行上述步驟,做法是合併已加入專案中的所有設定檔資料檔案,並在專案屬性頁面的「Profile-Guided Optimization Mode」設定設為「Optimized」時使用這些資料

在啟用設定檔引導最佳化功能的情況下建構專案

現在您已擷取設定檔並加入專案中,編譯器可以利用這些資料微調版本的最佳化作業。

您可以為 PGO 最佳化版本建立新的專案設定,以便只在必要時透過這個模式建構應用程式。

「New Solution Configuration」對話方塊,顯示正在根據發布子版本建立建構設定,但這次會將「PGO-Optimized」做為新的建構設定名稱。

圖 7:建立新的 PGO 最佳化建構設定。

將專案「Perperty Pages」中的「Profile-Guided Optimization Mode」設定設為「Optimized」

「Project Properties」對話方塊已開啟「General」設定,其中顯示「PGO」設定,且「Profile Guided Optimization Mode」已設為「Optimized」

圖 8:將 PGO 最佳化模式設為「Optimized」。

從裝置複製檔案,然後在 Solution Explorer 中將檔案「新增」至專案。下次建構 PGO 最佳化設定時,編譯器會取用這些設定檔資料檔案,用來調整編譯器最佳化程式碼的方式。

您可以使用 ADB 或 Android Device Explorer,將設定檔資料檔案從裝置複製到專案中。

在 AGDE 以外使用設定檔引導最佳化功能

如果 AGDE 不支援您使用的建構系統,您可能需要直接編輯建構作業。Clang 說明文件 涵蓋必要的開關 – -fprofile-generate-fprofile-use

如果您的遊戲採用中介軟體引擎,請參閱引擎相關說明文件,瞭解如何啟用 PGO (如果支援)。