非專業遊戲CPU多核效能研究
作為一個專業web後端開發,非常業餘遊戲愛好者,普通硬體退燒者,雖然對遊戲研發一竅不通,想對遊戲效能的問題探討下。
遊戲效能與多核CPU的疑問
第一個問題,近幾年為什麼遊戲主旋律都在GPU的選擇上,而往往都是CPU能力過剩,難道CPU就沒有壓榨的空間?
先拿吃雞遊戲舉例,引用一張評測文章裡的CPU與顯示卡不同組合配置的大逃殺benchmark圖:
可以看到搭載了GTX 1080+i5 7500(4核4執行緒 3.4GHz)的配置跑分比GTX1070+i7 7700k(4核8執行緒 4.2GHz)高,說明此配置中顯示卡仍是決定因素。
而使用的CPU 與 顯示卡的詳細引數如下
遊戲引擎
為什麼會這樣?先了解下常見的遊戲引擎,有助於瞭解其中的原因。
我對遊戲引擎不太瞭解,先找公開的資料。兩大遊戲引擎之一的Unity,程式碼開源,文件齊全,先從文件瞭解他涉及的功能。
- 2D
- Graphics
- Physics
- Scripting
- Multiplayer and Networking
- Audio
- Animation
- Timeline
- UI
- Navigation and Pathfinding
- Unity Services & Dashboard
- XR
- Open-source repositories
所以引擎包括了
2D : 顧名思義
圖形: 主要有燈光,攝像機,材質,貼圖。
物理: 主要控制遊戲世界物體相關的互動,如碰撞。
指令碼: 提供對引擎建立的遊戲物件的控制,觸發遊戲事件,響應使用者輸入。
多人與網路: 提供對網路遊戲支援。
音訊: 音效必不可少,還提供聲源定位等。
動畫: 又是個無須解釋的。
時間線: 常用來處理我們常說的過場動畫。
UI: 定義遊戲介面,玩家最長時間觀看的地方。
導航與路徑尋找: 定義遊戲物件的導航點。
Unity服務&儀表板: 跟web後端一樣,管理員的控制檯,觀看各種遊戲資料。
XR: 提供VR/AR支援。
可以猜測遊戲主入口的方法會載入以上功能元件,圖形/物理/網路/指令碼 層次上不相關,都可以在各自執行緒進行工作。
廣義上的遊戲,無論是單機遊戲還是網路遊戲,其主要的處理層面是在玩家與遊戲中物理世界中各種事件的互動處理上。作為遊戲效果的直接體現上,3D遊戲中的貼圖與實時多邊形渲染是一個主要值得優化的效能點。
DirectX
DX12是隨WIN10搭載的,針對現代多核CPU提供了優化。主要是下沉了API提供的基礎功能,更貼近硬體,當然這樣開發者需要管理更多的CPU與GPU的同步問題,以前在DX11中是隱含在runtime時進行處理的,DX12中對此的介紹:
圖形渲染是現代3D遊戲的主要任務之一。在DirectX 9中,原則上所有渲染API都必須在一個執行緒中呼叫。DirectX 10/11中加強了多執行緒支援,但各執行緒的負載很不平衡,渲染相關負載主要集中在遊戲的主渲染執行緒和圖形驅動中,這使得渲染任務無法充分利用現代多核處理器的能力,經常成為遊戲渲染管線的主要效能瓶頸之一。
為了提高圖形渲染效率,在DirectX 12中,多執行緒得到了前所未有的支援。在重新設計的DirectX 12中,為了讓應用程式的圖形渲染可以達到最大的多核CPU的使用效率:一方面,DirectX 12儘可能地預處理和複用渲染命令,降低渲染狀態的切換開銷,提升渲染API在CPU和GPU上的處理效率;另一方面,為應用程式提供了更高效的多執行緒渲染機制,允許應用程式最大程度地利用多工獲得效能提升。通過使用多執行緒手段可以使圖形驅動在CPU端的開銷降低,同時也使GPU的工作效率顯著提升。DX12的多執行緒機制除了使渲染任務能更均衡地並行執行在不同的處理器核上以提升效能,還能降低CPU的功耗,這對移動平臺上的遊戲也非常重要。
從原文介紹可以看出,由於3D場景渲染工作是由CPU提交給GPU進行的,首先GPU要能在短時間內完成運算,在此基礎上如果GPU有富裕,我們希望能讓CPU開啟多執行緒提交更多的任務給GPU進行運算。
據瞭解畫圖渲染的過程是程式向顯示卡提交一個Draw:App->DX runtime->User mode driver->dxgkrnl->Kernel mode driver->GPU ,到GPU前的工作量都在CPU, DX12的設計目的是減少中間層,提高效率。
基於此,參考以下使用了DX11與DX12的CPU負載對比圖:
降低了單核CPU的負載,平攤了一部分任務到其他核上,比DX11時8核有2核完全沒用上有改善。
看一下最近流行的吃雞最低配置:
處理器:i3-4340 / AMD FX-6300
顯示卡:GeForce GTX 660 / Radeon HD 7850
DirectX : 11
DX11顯然是個問題,軟體總是落後於硬體更新的,硬體架構升級後,上層的作業系統才會開始適配,然後是作業系統之上,應用層的遊戲引擎。
再看看DOTA2, 還在使用DirectX 9c。
遊戲引擎需要使用作業系統提供的新的硬體層的抽象API,封裝層高層API供開發者使用。
至少基於Unity3D的產品顯然還沒有升級。
顯然與Web產品一樣,JDK已經開始釋出10了。還有大量的遺留產品在使用JDK6。JDK8的lambda使用方式也才剛剛開始普及,應用層比底層設施還是要遲緩的多。
參考內容:
https://msdn.microsoft.com/zh-cn/communitydocs/game-development/directx-12-white-paper/ta15073006
https://docs.unity3d.com/Manual/Shaders.html
相關文章
- Msbuild利用cpu多核加速UI
- CPU單核多核區別【轉載】單核
- 多核CPU時代,是否代表JAVA更有優勢?Java
- win10 如何開啟多核_win10cpu怎麼開啟多核執行Win10
- [非專業翻譯] 高效能物件對映框架 - Mapster物件框架
- iOS GCD入門和GCD對CPU多核的使用iOSGC
- 如何利用多核CPU來加速你的Linux命令Linux
- CPU入門掃盲篇之一文搞懂多 CPU、多核 CPU、超執行緒技術、SMP執行緒
- CPU效能分析
- python單程式能否利用多核cpu的測試結論Python
- 對多執行緒程式,單核cpu與多核cpu如何工作相關的探討執行緒單核
- 檢視伺服器CPU的個數、CPU的核數、多核超執行緒數伺服器執行緒
- 聊聊CPU的發展歷程之單核、多核、超執行緒單核執行緒
- Win 7下提高雙核、多核CPU的速度的設定方法
- 快樂的非專業IT菜鳥
- node.js非專業介紹Node.js
- 【譯】闖入遊戲開發 #7:音樂(對於非專業人士)遊戲開發
- Win10有超級效能模式嗎?智慧調配CPU 提升遊戲效能Win10模式遊戲
- 光大證券:跨市場遊戲行業研究專題之女性向遊戲(附下載)遊戲行業
- [非專業翻譯] Mapster - 配置位置
- [非專業翻譯] Mapster - 物件引用物件
- 遊戲效能下降15%,Win11首次更新讓AMD CPU受挫遊戲
- 作業系統與多核處理器作業系統
- CPU效能分析工具原理
- linux top命令檢視記憶體及多核CPU的使用講述Linux記憶體
- 當多核變單核:破解CPU核心神秘失蹤的終極指南!單核
- 多核cpu、cpu快取記憶體、快取一致性協議、快取行、記憶體快取記憶體協議
- 專業人士總被用來做不專業的事,非專業人員則總是用做專業的事
- [非專業翻譯] Mapster - 依賴注入依賴注入
- [非專業翻譯] Mapster - 對映忽略
- [非專業翻譯] Mapster - 對映器
- [非專業翻譯] Mapster - 對映配置
- [非專業翻譯] Mapster - 配置例項
- [非專業翻譯] Mapster - 非同步支援非同步
- oracle dba需要哪些非oracle專業知識Oracle
- 傳奇遊戲專題研究報告(上)遊戲
- OpenAI:馬斯克發起10億美元非營利AI研究專案OpenAI馬斯克
- java多執行緒問題 多核cpu遇上java多執行緒,求解釋Java執行緒