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

設定檔引導最佳化的相關支援已在 AGDE 22.2.71 版中推出。

找出 PGO 設定

透過「Solution Explorer」開啟專案設定。

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

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

確認您的平台已設為採用 Android 設定 (例如 Android-arm64-v8a)。

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

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

圖 2:「Project Properties」對話方塊。

在專案中啟用 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」

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

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

在「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 最佳化建構設定。

將專案屬性頁面中的「Profile-Guided Optimization Mode」設定設為「Optimized」

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

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

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

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

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

如果您使用的是 AGDE 不支援的建構系統,您可能需要直接編輯版本。Clang 說明文件中列有必要的切換鈕:-fprofile-generate-fprofile-use

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