如何利用多核CPU提高虛擬現實性能?

虛擬現實引領新時代令人驚喜的新體驗,但也帶來瞭各種新的挑戰。其中之一就是虛擬現實應用“耗能”問題。

1

虛擬現實挑戰瞭圖形和仿真技術,以至於創造優秀虛擬現實體驗的硬件需求成為日前熱點。這些高要求給虛擬現實體驗背後的軟件帶來瞭巨大的壓力。這些軟件該如何充分利用現有的硬件,包括如何更好利用多核CPU。

多核的崛起

在提升計算機工作速度的道路上,晶體管數量成倍增加,CPU時鐘頻率也穩步提高。不幸的是,隨著晶體管數量增多、時鐘頻率的提升,處理器就需要消耗更多的能源,產生的熱量也隨之增加。過熱會損壞CPU元件。你也許留意到,使用手機玩遊戲時,手機會發燙。因此CPU制造商需要在速度和熱量之間尋求平衡,確保所產生的熱量對設備無害,也就是通常提到的散熱層。

處理這個問題的趨勢是把多核CPU執行核置於時鐘頻率較低的物理芯片上。雙核CPU執行任務的速度是單核的雙倍。但是,它耗能少,產熱少。

單核CPU幾乎退出瞭市場。iPhone 6帶有雙核處理器。高端安卓手機通常是八核。主流PC電腦制造商也在推出八核芯片。甚至PlayStation 4也配備八核處理器。但是目前為止,開發商隻使用瞭八核中的六核。

充分利用多核,就需要高效的多線程軟件系統。

多核編程

常言道:“天下無免費的午餐。”多線程編程或引擎使用多核CPU需要深思。頭號麻煩就是數據沖突。多核CPU執行路徑需要訪問相同的數據。

這有一個相對簡單的例子。一個CPU將數值寫入內存,同時另一個CPU試圖讀取同一個數值。第二個CPU可能隻讀到部分數據,因此這個數據是無用的。這會導致程序奔潰或意料之外的結果。

為保護被CPU同步訪問的數據,程序員使用瞭同步對象。但進行同步時,CPU需要等待同步完成,就會出現性能不平衡和耗費時間。從架構設計最大限度地減少同步數據量是最優的方案,但這也使得充分發揮多核的作用變得困難起來。如果程序員錯誤地設計和執行程序,有可能會讓多核的執行速度變得更慢。

遊戲引擎的性能就是有關收集信息、模擬和渲染。引擎運行得更快更穩,幀率就更快、用戶體驗也更好。要做到每秒90幀,就需要在11毫秒內完成信息收集、模擬和渲染。

而虛擬現實需要渲染兩次,每隻眼睛一次。11毫秒的時間非常短,所以遊戲開發者為瞭保持每秒90幀的速度,通常會降低內容的質量。當然,體驗感就變得較差。

許多引擎需要進行設計上的改進以支持多核。這可以提高一些核的性能,但數據沖突又會抵消一些。這不再是幾個CPU核心的問題瞭。

改造多核

主流遊戲大多通過各種形式的功能性多線程進行改造。

一般首要做的就是將渲染劃分到兩個不同的線程中,然後確定有助於(如物理和AI )平行化的區域。

較於線性地循環所有的物理和AI對象,工作會被分配到多核CPU運行的多線程上。當工作完成時,程序就回到線性執行。更高級的系統允許線程空閑的時候能自己給自己安排工作。事實上,這種多線程有一定的好處,但CPU需要耗費大量的時間實現同步,導致一個或多個CPU閑置。手動調優適用於單個產品,但它並不能自動地負載均衡。造成的結果就是CPU使用率不均衡。大的遊戲社區能夠識別多數舊遊戲引擎,超過四核的處理器反而無法顯示其優勢。

主流遊戲引擎CPU使用率不均衡

2

另外一個辦法是重新設計多核引擎

對比現下的CPU結構和未來設備藍圖時,發現需要一個新的系統。這個新系統能夠承載多核、可測的負載平衡、可擴展、在N核間保持流暢控制,以及最重要的是最大限度減少數據沖突。

其中一個架構叫多級數據並行模擬

這種模擬通過修改來延展到CPU各個內核,並保留其中一個內核用於渲染。為瞭實現這點,模擬會分解成多任務,以便CPU能以任意順序分開處理。

這就意味著任務將分為多個階段,如讀取階段、決策階段和編寫階段。另外你會需要一個廣播階段,方便對象間的交流。

現階段任務確保完成後,才能進入下一階段。每一階段的執行,都需要有效分配,確保負載平衡。當中有內核提前完成任務時,就會被分配更多的任務,直至現階段任務全部結束。

多級數據並行模擬(帶有異步渲染器)

3

這個設計應允許大型模擬帶有異步渲染器。為瞭說明潛在的性能提升,我們提供一些采用類似結構的MaxPlay 運行引擎的測試數據。

多級數據並行模擬能提升CPU利用率

4

以上你能看到六核(帶六個超線程) CPU運行密集群體模擬的性能表現。這個視頻展示瞭兩核到四核到六核模擬的性能提升。

較於傳統功能性多線程模式,不同硬件平臺測試結果顯示性能得到瞭提升。

在許多情況下,我們發現采用這個技巧能大幅度提升性能,開發商就可以加入更多的體驗內容。硬件生產商預測核數量將會持續增加,所以考慮十二、十六甚至二十四核的解決對策相當重要。

對懷疑DirectX12和Vulkan graphic APIs系統的人來說,這個架構可以很好傳輸顯示列表,在有需要時,能從任一階段使用返回數據進行渲染。

所以,如果你打算利用多核處理器來豐富虛擬現實體驗,你應該找到一個解決方案使用多級數據並行模擬。

from:YIVIAN

Comments are closed.