如何利用多核CPU提高虚拟现实性能?
虛擬現(xiàn)實引領(lǐng)新時代令人驚喜的新體驗,但也帶來了各種新的挑戰(zhàn)。其中之一就是虛擬現(xiàn)實應(yīng)用“耗能”問題。
?
虛擬現(xiàn)實挑戰(zhàn)了圖形和仿真技術(shù),以至于創(chuàng)造優(yōu)秀虛擬現(xiàn)實體驗的硬件需求成為日前熱點。這些高要求給虛擬現(xiàn)實體驗背后的軟件帶來了巨大的壓力。這些軟件該如何充分利用現(xiàn)有的硬件,包括如何更好利用多核CPU。
多核的崛起
在提升計算機(jī)工作速度的道路上,晶體管數(shù)量成倍增加,CPU時鐘頻率也穩(wěn)步提高。不幸的是,隨著晶體管數(shù)量增多、時鐘頻率的提升,處理器就需要消耗更多的能源,產(chǎn)生的熱量也隨之增加。過熱會損壞CPU元件。你也許留意到,使用手機(jī)玩游戲時,手機(jī)會發(fā)燙。因此CPU制造商需要在速度和熱量之間尋求平衡,確保所產(chǎn)生的熱量對設(shè)備無害,也就是通常提到的散熱層。
處理這個問題的趨勢是把多核CPU執(zhí)行核置于時鐘頻率較低的物理芯片上。雙核CPU執(zhí)行任務(wù)的速度是單核的雙倍。但是,它耗能少,產(chǎn)熱少。
單核CPU幾乎退出了市場。iPhone 6帶有雙核處理器。高端安卓手機(jī)通常是八核。主流PC電腦制造商也在推出八核芯片。甚至PlayStation 4也配備八核處理器。但是目前為止,開發(fā)商只使用了八核中的六核。
充分利用多核,就需要高效的多線程軟件系統(tǒng)。
多核編程
常言道:“天下無免費(fèi)的午餐。”多線程編程或引擎使用多核CPU需要深思。頭號麻煩就是數(shù)據(jù)沖突。多核CPU執(zhí)行路徑需要訪問相同的數(shù)據(jù)。
這有一個相對簡單的例子。一個CPU將數(shù)值寫入內(nèi)存,手機(jī)游戲交易同時另一個CPU試圖讀取同一個數(shù)值。第二個CPU可能只讀到部分?jǐn)?shù)據(jù),因此這個數(shù)據(jù)是無用的。這會導(dǎo)致程序奔潰或意料之外的結(jié)果。
為保護(hù)被CPU同步訪問的數(shù)據(jù),程序員使用了同步對象。但進(jìn)行同步時,CPU需要等待同步完成,就會出現(xiàn)性能不平衡和耗費(fèi)時間。從架構(gòu)設(shè)計最大限度地減少同步數(shù)據(jù)量是最優(yōu)的方案,但這也使得充分發(fā)揮多核的作用變得困難起來。如果程序員錯誤地設(shè)計和執(zhí)行程序,有可能會讓多核的執(zhí)行速度變得更慢。
游戲引擎的性能就是有關(guān)收集信息、模擬和渲染。引擎運(yùn)行得更快更穩(wěn),幀率就更快、用戶體驗也更好。要做到每秒90幀,就需要在11毫秒內(nèi)完成信息收集、模擬和渲染。
而虛擬現(xiàn)實需要渲染兩次,每只眼睛一次。11毫秒的時間非常短,所以游戲開發(fā)者為了保持每秒90幀的速度,通常會降低內(nèi)容的質(zhì)量。當(dāng)然,體驗感就變得較差。
許多引擎需要進(jìn)行設(shè)計上的改進(jìn)以支持多核。這可以提高一些核的性能,但數(shù)據(jù)沖突又會抵消一些。這不再是幾個CPU核心的問題了。
改造多核
主流游戲大多通過各種形式的功能性多線程進(jìn)行改造。
一般首要做的就是將渲染劃分到兩個不同的線程中,然后確定有助于(如物理和AI )平行化的區(qū)域。
較于線性地循環(huán)所有的物理和AI對象,工作會被分配到多核CPU運(yùn)行的多線程上。當(dāng)工作完成時,程序就回到線性執(zhí)行。更高級的系統(tǒng)允許線程空閑的時候能自己給自己安排工作。事實上,這種多線程有一定的好處,但CPU需要耗費(fèi)大量的時間實現(xiàn)同步,導(dǎo)致一個或多個CPU閑置。手動調(diào)優(yōu)適用于單個產(chǎn)品,但它并不能自動地負(fù)載均衡。造成的結(jié)果就是CPU使用率不均衡。大的游戲社區(qū)能夠識別多數(shù)舊游戲引擎,超過四核的處理器反而無法顯示其優(yōu)勢。
主流游戲引擎CPU使用率不均衡
另外一個辦法是重新設(shè)計多核引擎
對比現(xiàn)下的CPU結(jié)構(gòu)和未來設(shè)備藍(lán)圖時,發(fā)現(xiàn)需要一個新的系統(tǒng)。這個新系統(tǒng)能夠承載多核、可測的負(fù)載平衡、可擴(kuò)展、在N核間保持流暢控制,以及最重要的是最大限度減少數(shù)據(jù)沖突。
其中一個架構(gòu)叫多級數(shù)據(jù)并行模擬
這種模擬通過修改來延展到CPU各個內(nèi)核,并保留其中一個內(nèi)核用于渲染。為了實現(xiàn)這點,模擬會分解成多任務(wù),以便CPU能以任意順序分開處理。
這就意味著任務(wù)將分為多個階段,如讀取階段、決策階段和編寫階段。另外你會需要一個廣播階段,方便對象間的交流。
現(xiàn)階段任務(wù)確保完成后,才能進(jìn)入下一階段。每一階段的執(zhí)行,都需要有效分配,確保負(fù)載平衡。當(dāng)中有內(nèi)核提前完成任務(wù)時,就會被分配更多的任務(wù),直至現(xiàn)階段任務(wù)全部結(jié)束。
多級數(shù)據(jù)并行模擬(帶有異步渲染器)
?
這個設(shè)計應(yīng)允許大型模擬帶有異步渲染器。為了說明潛在的性能提升,我們提供一些采用類似結(jié)構(gòu)的MaxPlay 運(yùn)行引擎的測試數(shù)據(jù)。
多級數(shù)據(jù)并行模擬能提升CPU利用率
?
以上你能看到六核(帶六個超線程) CPU運(yùn)行密集群體模擬的性能表現(xiàn)。這個視頻展示了兩核到四核到六核模擬的性能提升。
較于傳統(tǒng)功能性多線程模式,不同硬件平臺測試結(jié)果顯示性能得到了提升。
在許多情況下,我們發(fā)現(xiàn)采用這個技巧能大幅度提升性能,開發(fā)商就可以加入更多的體驗內(nèi)容。硬件生產(chǎn)商預(yù)測核數(shù)量將會持續(xù)增加,所以考慮十二、十六甚至二十四核的解決對策相當(dāng)重要。
對懷疑DirectX12和Vulkan graphic APIs系統(tǒng)的人來說,這個架構(gòu)可以很好傳輸顯示列表,在有需要時,能從任一階段使用返回數(shù)據(jù)進(jìn)行渲染。
所以,如果你打算利用多核處理器來豐富虛擬現(xiàn)實體驗,你應(yīng)該找到一個解決方案使用多級數(shù)據(jù)并行模擬。
總結(jié)
以上是生活随笔為你收集整理的如何利用多核CPU提高虚拟现实性能?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VR游戏制作中“延迟”的优化方法
- 下一篇: Unity超级角色控制器研究(四)——地