分析執行緒排程

要確認遊戲程序執行緒是否妥善使用,並安排時間以獲得最佳成效,需要考量以下幾點。

  • 影格放送速度
  • 多執行緒與執行緒平行
  • 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) 會在不同核心之間切換的遊戲 (以紫色顯示)