分析執行緒排程

如要判斷遊戲程序執行緒是否妥善運用,並排定時間來達到最佳成效,需要考量以下幾點。

  • 影格放送速度
  • 多執行緒和執行緒平行處理
  • CPU 核心相依性

多執行緒

許多遊戲和遊戲引擎都使用多執行緒,將 CPU 工作劃分為邏輯任務,而這些任務可能會獨立執行。其中一種常見設定包括輸入和遊戲邏輯的遊戲執行緒、準備和提交要繪製的物件的轉譯執行緒,以及用於其他子工作的背景工作執行緒 (例如動畫或音訊)。

建議您平行處理執行緒,充分運用多執行緒的效能優勢。例如遊戲和轉譯執行緒在不同核心上執行部分或完整並行執行的情況。不過,在共用資料依附元件的情況下,系統不一定每次都能達成此目的;不過,如果可能的話,這麼做可能會降低 CPU 作業時間,進而增加影格速率。

具有高度平行處理的主執行緒和轉譯執行緒,以及背景工作執行緒和音訊執行緒的遊戲
圖 1 具有高度平行處理的主執行緒和轉譯執行緒,以及背景工作執行緒和音訊執行緒的遊戲

CPU 核心相依性

對 CPU 工作負載效能的其中一個因素,是排定在核心上的排程方式。並可分為兩個部分:

  • 遊戲執行緒是否執行效能最佳核心。
  • 遊戲執行緒是否經常在核心之間切換

擷取追蹤記錄時,您可以在設定檔設定中啟用 CPU,調查 CPU 用量下的 CPU 執行緒行為。將追蹤記錄部分放大至 200 毫秒以內,即可查看在裝置 CPU 核心上執行的個別程序。一般來說,小型核心會對應較小的索引 (例如 CPU 0-3),而大型核心會對應到較高的索引 (例如 CPU 6-7)。

一般來說,當遊戲在前景運作時,遊戲執行緒和算繪執行緒等持續性執行緒應在高效能大型核心上執行,而其他程序和背景工作執行緒則安排在較小的核心上執行。

含有主執行緒和轉譯執行緒的遊戲,主要在大型核心 (CPU 6-7) 上執行,以淺藍色顯示
圖 2. 包含主要和轉譯執行緒的遊戲,主要是在大型核心 (CPU 6-7) 上執行,以淺藍色顯示

如果主要和轉譯執行緒在單一 CPU 影格中或兩個連續的 CPU 影格之間變更核心,也可以觀察遊戲執行緒是否頻繁切換核心。這個 CPU 行為可能表示遊戲執行緒未正確啟動。這類核心交換器會因環境切換造成一些負擔,而核心快取/暫存器的狀態遺失,導致 CPU 影格的長度增加。

使用主要 (Thread-7) 和轉譯執行緒 (Thread-8) 切換核心的遊戲,以紫色顯示
圖 3 使用主要 (Thread-7) 和轉譯執行緒 (Thread-8) 的遊戲,在核心間切換,以紫色顯示