AGDE 22.2.71 版已導入設定檔引導最佳化功能的支援機制。
找出 PGO 設定
透過 Solution Explorer 開啟專案設定。
圖 1:Visual Studio 的「Solution Explorer」視窗。
確認「Platform」已設為 Android 設定 (例如 Android-arm64-v8a)。
在左側面板中,依序選取「Configuration Properties」>「General」。找出名為「PGO」的屬性群組。
圖 2:專案的屬性對話方塊。
在專案中啟用 PGO 檢測版本
在專案中新增名為「Instrumented」的新設定。這是以您在開發期間用於測試的設定為依據,也就是傳統的最佳化版本 (只要保留編譯器最佳化設定,還是可以啟用其他偵錯功能)。
在「Property Pages」對話方塊中,按一下「Configuration Manager…」。
圖 3:「Configuration Manager」對話方塊。
在「Configuration Manager」對話方塊中,依序選取「Active solution configuration」下拉式選單 >「<New…>」。
圖 4:建立新的建構設定。
接下來,建立新的 PGO 檢測設定。
圖 5:「New Solution Configuration」對話方塊。
如要在 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 最佳化版本建立新的專案設定,以便只在必要時透過這個模式建構應用程式。
圖 7:建立新的 PGO 最佳化建構設定。
將專案「Perperty Pages」中的「Profile-Guided Optimization Mode」設定設為「Optimized」。
圖 8:將 PGO 最佳化模式設為「Optimized」。
從裝置複製檔案,然後在 Solution Explorer 中將檔案「新增」至專案。下次建構 PGO 最佳化設定時,編譯器會取用這些設定檔資料檔案,用來調整編譯器最佳化程式碼的方式。
您可以使用 ADB 或 Android Device Explorer,將設定檔資料檔案從裝置複製到專案中。
在 AGDE 以外使用設定檔引導最佳化功能
如果 AGDE 不支援您使用的建構系統,您可能需要直接編輯建構作業。Clang
說明文件
涵蓋必要的開關 – -fprofile-generate
和
-fprofile-use
。
如果您的遊戲採用中介軟體引擎,請參閱引擎相關說明文件,瞭解如何啟用 PGO (如果支援)。