如要判斷遊戲程序執行緒是否妥善運用,並排定時間來達到最佳成效,需要考量以下幾點。
- 影格放送速度
- 多執行緒和執行緒平行處理
- CPU 核心相依性
多執行緒
許多遊戲和遊戲引擎都使用多執行緒,將 CPU 工作劃分為邏輯任務,而這些任務可能會獨立執行。其中一種常見設定包括輸入和遊戲邏輯的遊戲執行緒、準備和提交要繪製的物件的轉譯執行緒,以及用於其他子工作的背景工作執行緒 (例如動畫或音訊)。
建議您平行處理執行緒,充分運用多執行緒的效能優勢。例如遊戲和轉譯執行緒在不同核心上執行部分或完整並行執行的情況。不過,在共用資料依附元件的情況下,系統不一定每次都能達成此目的;不過,如果可能的話,這麼做可能會降低 CPU 作業時間,進而增加影格速率。
![具有高度平行處理的主執行緒和轉譯執行緒,以及背景工作執行緒和音訊執行緒的遊戲](https://developer.android.google.cn/static/images/agi/threads-scheduling-images/sample_multithreading.png?authuser=0000&hl=zh-tw)
CPU 核心相依性
對 CPU 工作負載效能的其中一個因素,是排定在核心上的排程方式。並可分為兩個部分:
- 遊戲執行緒是否在工作負載適用的最佳核心上執行。
- 遊戲執行緒是否經常在核心之間切換。
現代裝置通常會使用名為「異質運算」的架構,當中的核心效能不同:
- 一或多個核心提供最佳效能,但耗電量更高。有時也稱為「大」核心。
- 其他核心的峰值效能較低,但節能效率較高。有時也稱為「小」核心。
- 選用:一或多個核心可在效能與功率之間取得平衡。有時也稱為「中等」核心。
擷取追蹤記錄時,您可以在設定檔設定中啟用 CPU,調查 CPU 用量下的 CPU 執行緒行為。將追蹤記錄部分放大至 200 毫秒以內,即可查看在裝置 CPU 核心上執行的個別程序。一般來說,較小的核心會對應到較小的索引 (例如 CPU 的「0」至「3」),而較大型的核心會對應較高的索引 (例如 CPU 的「6」至「7」),而中間核心 (例如 CPU) 會佔用中間核心的索引 (例如 CPU 的「5」至「6」)。這種做法是常見的慣例,但不能保證。
如果您發現某些執行緒的排程在 CPU 上不符合其效能或效能的需求,請考慮為這些執行緒手動設定 CPU 相依性。
![含有主執行緒和轉譯執行緒的遊戲,主要在大型核心 (CPU 6-7) 上執行,以淺藍色顯示](https://developer.android.google.cn/static/images/agi/threads-scheduling-images/sample_bigcores.png?authuser=0000&hl=zh-tw)
您也可以觀察執行緒是否有切換核心。這類核心交換器在內容切換作業造成一些負擔,而核心快取/暫存器的狀態遺失也會導致。
![使用主要 (Thread-7) 和轉譯執行緒 (Thread-8) 切換核心的遊戲,以紫色顯示](https://developer.android.google.cn/static/images/agi/threads-scheduling-images/sample_coreswitching.png?authuser=0000&hl=zh-tw)
為執行緒設定 CPU 相依性,指示系統在遊戲於前景運作時,將其安排在特定核心上。進行這項作業時,請考慮下列幾項因素:
- 平台軟體無法針對執行階段因素 (例如負載和熱節流) 動態調整工作配置。
針對不同裝置進行效能測試,可能會產生截然不同的效能特性,尤其是當裝置價格點或發行日期具有顯著差異時。
較新或較昂貴的裝置可能適合在小型核心上執行特定工作負載,但如果是較舊或價格較高的裝置,則可能需要更大的核心才能滿足同一工作負載的期限。
強制讓大核心使用相依性,可能會無謂增加電池耗電量和熱負載。
因此,一般而言,最好避免手動設定 CPU 相依性。