分析執行緒排程

如要判斷遊戲程序執行緒是否得到適當運用和排程,以獲得最佳效能,請考慮下列幾項事項。

  • 影格放送速度
  • 多執行緒和執行緒平行化
  • CPU 核心親和性

多執行緒

許多遊戲和遊戲引擎會使用多執行緒,將 CPU 工作劃分為邏輯工作,這些工作可以獨立執行。常見的設定包括:處理輸入和遊戲邏輯的遊戲執行緒、準備及提交要繪製物件的算繪執行緒,以及處理動畫或音訊等其他子工作的背景工作執行緒。

建議您將執行緒平行化,充分利用多執行緒的效能優勢。舉例來說,遊戲和算繪執行緒可能會在不同核心上部分或完全並行執行。這並非一律可行,例如在有共用資料依附元件的情況下;不過,如果可以這麼做,CPU 時間可能會縮短,進而提高影格速率。

遊戲的主執行緒和算繪執行緒經過妥善平行化處理,且有背景工作執行緒和音訊執行緒
圖 1 遊戲主執行緒和算繪執行緒經過妥善平行化處理,且有背景工作執行緒和音訊執行緒

CPU 核心親和性

CPU 工作負載的效能會受到核心排程方式的顯著影響。這可能會分成兩個元件:

  • 遊戲執行緒是否在最適合工作負載的核心上執行。
  • 遊戲執行緒是否經常在核心之間切換。

現代裝置通常採用稱為「異質運算」的架構,其中的核心效能等級各不相同:

  • 一或多個核心提供頂尖的尖峰效能,但耗電量較高。有時也稱為「大」核心。
  • 其他核心的峰值效能較低,但更省電。有時也稱為「小」核心。
  • 選用:一或多個核心可在效能和電力之間取得平衡。有時也稱為「中」核心。

您可以在擷取追蹤記錄時,啟用設定檔設定中的「CPU」,藉此在「CPU 使用率」下方調查 CPU 執行緒行為。將追蹤記錄的某個部分放大至 <200 毫秒,即可查看裝置 CPU 核心上執行的個別程序。通常較小的核心對應較小的索引 (例如 CPU「0」-「3」),較大的核心則對應較高的索引 (例如 CPU「6」-「7」),而中間的核心 (如有) 會佔用中間的索引 (例如 CPU「5」-「6」)。這是常見的慣例,但無法保證一定會發生。

如果發現特定執行緒排程在 CPU 上,但 CPU 無法滿足效能或電力需求,請考慮手動設定這些執行緒的 CPU 親和性。

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

你也可以觀察執行緒是否在核心之間切換。 這類核心切換會導致一些額外負荷,包括環境切換,以及核心快取/暫存器狀態遺失。

遊戲的主執行緒 (Thread-7) 和算繪執行緒 (Thread-8) 會在核心之間切換,以紫色顯示
圖 3 遊戲的主執行緒 (Thread-7) 和算繪執行緒 (Thread-8) 會在核心之間切換,以紫色顯示

為執行緒設定 CPU 親和性,可指示系統在遊戲處於前景時,將執行緒排程至指定核心。執行這項操作時,請考量下列因素:

  • 平台軟體無法根據負載和熱節流等執行階段因素,動態調整工作放置位置。
  • 在不同裝置上進行效能測試時,可能會產生差異極大的效能特徵,尤其是價格或發布日期差異很大的裝置。

    較新或較昂貴的裝置可能可以在小核心上輕鬆執行特定工作負載,但較舊或較平價的裝置可能需要較大的核心,才能在期限內完成相同的工作負載。

  • 強制將親和性設為大核心可能會不必要地增加電池耗電量和熱負荷。

基於上述原因,一般來說最好避免手動設定 CPU 親和性。