欧美有码视频,一区二区三区四区蜜桃,成人网ww555视频免费看,制服丝袜激情欧洲亚洲

我的訂單|我的收藏|我的商城|幫助中心|返回首頁(yè)
搜維爾科技[m.kinddeliver.com]>服務(wù)>案例分享 應(yīng)用研究>案例分享>軟件開(kāi)發(fā)

Unity Burst:Neon intrinsics更新

文章來(lái)源: 作者:frank 發(fā)布時(shí)間:2021年08月11日 點(diǎn)擊數(shù): 字號(hào):

Unity最近發(fā)布了Burst 1.5。新版本重點(diǎn)添加了多條Neon intrinsics指令。Neon intrinsics指令支持精確設(shè)定矢量指令,為Arm CPU的處理進(jìn)程生成最為高效代碼。Neon指令集傳統(tǒng)上只適用于C/C++語(yǔ)言,而Unity目前已成功將其移植到了C#中。

不過(guò),要找到最合適的指令并沒(méi)那么簡(jiǎn)單,Arm為此特地制定了一份“Neon intrinsics在Unity中的運(yùn)用”指南,外加一個(gè)帶有開(kāi)源代碼的Unity項(xiàng)目,供廣大開(kāi)發(fā)者參考。這篇指南將幫助你以正確的結(jié)構(gòu)構(gòu)建Burst代碼,讓代碼自動(dòng)應(yīng)用Neon指令集,享受其帶來(lái)的性能提升,為你省去自行編寫(xiě)指令集的麻煩。我們下面就來(lái)看看怎樣才能充分利用起Neon intrinsics。

自動(dòng)矢量化(Auto-vectorization)

Burst編譯器將自動(dòng)采用Neon intrinsics來(lái)提高性能收益,而我們?nèi)钥梢允褂闷渌椒▉?lái)進(jìn)一步提高Burst性能。舉例來(lái)說(shuō),我們可根據(jù)一定的結(jié)構(gòu)來(lái)調(diào)整數(shù)據(jù)和函數(shù)循環(huán)結(jié)構(gòu),利用自動(dòng)矢量化來(lái)獲取大量的性能提升。

要想在Burst編譯器中將四條指令合并為一條Neon SIMD指令,我們可編寫(xiě)簡(jiǎn)短、連貫并保留內(nèi)聯(lián)的函數(shù)。此外,經(jīng)我們?cè)谖锢砼鲎材M中測(cè)試發(fā)現(xiàn),傳入Burst函數(shù)的指針在添加[NoAlias]屬性后,其速度可提高4倍。??

開(kāi)發(fā)者現(xiàn)身說(shuō)法

本文中的案例重點(diǎn)在于展示物理碰撞,因此上方演示場(chǎng)景僅使用了簡(jiǎn)單的膠囊型和立方體圖形。例中對(duì)兩種類型的碰撞進(jìn)行了優(yōu)化:用于角色-墻體間碰撞的軸向邊框盒(Axis-Aligned Bounding Boxes,AABB),及用于角色之間碰撞的截面半徑碰撞。

手動(dòng)編寫(xiě)的指令要快于編譯器并不簡(jiǎn)單,但這里將介紹幾種方法。可以讓性能改進(jìn)不僅是個(gè)難以實(shí)現(xiàn)的目標(biāo)。在進(jìn)入分析優(yōu)化階段后,我們可以先分析線程的運(yùn)行耗時(shí),再進(jìn)行調(diào)整,如此循環(huán)往復(fù)。我們能使用Profile Analyzer,或自己的計(jì)時(shí)方法來(lái)完成這一階段的優(yōu)化。

這時(shí)我們需要將注意力放到代碼調(diào)整上。在本例中,我們將原先的Burst jobs代碼轉(zhuǎn)寫(xiě)成了靜態(tài)函數(shù),方便進(jìn)行計(jì)時(shí)。異步執(zhí)行功能在最終的游戲代碼中發(fā)揮了巨大作用,盡管性能計(jì)時(shí)使得代碼執(zhí)行更為復(fù)雜了一點(diǎn)。在一個(gè)真正的游戲里,你需要使用ProfilerMarker、ProfilerRecorder和ProfileAnalyzer來(lái)計(jì)算job的耗時(shí)。而在此例中,改寫(xiě)后的Burst靜態(tài)函數(shù)實(shí)際上強(qiáng)制在腳本中應(yīng)用了自動(dòng)矢量化結(jié)構(gòu)。如果job使用的是由Burst靜態(tài)函數(shù)組成的NativeArray,則基本類型的指針使用起來(lái)也會(huì)更加簡(jiǎn)單,靜態(tài)函數(shù)會(huì)把數(shù)據(jù)拆分成更易矢量化的片段。而應(yīng)用在指針上的[NoAlias]屬性會(huì)告訴編譯器指針調(diào)用的數(shù)據(jù)是否有重復(fù)。在此案例中,Burst的性能非常強(qiáng)大,以至于只有極其出色的Neon代碼才能比它更快。為了充分發(fā)揮Neon的作用,這兩種類型的碰撞都需要采用特定的數(shù)據(jù)和邏輯結(jié)構(gòu)。

矢量化的效果在同時(shí)比對(duì)四個(gè)或八個(gè)對(duì)象時(shí)超好,因?yàn)檫@時(shí)運(yùn)算可一次性完成(在Neon指令正確的情況下)。

新指令的效果可謂立竿見(jiàn)影,其中一項(xiàng)優(yōu)化甚至能讓Burst代碼比結(jié)構(gòu)精巧的非Burst代碼快6倍,讓手動(dòng)編寫(xiě)的Neon代碼快10倍。

電話:010-50951355 傳真:010-50951352  郵箱:sales@m.kinddeliver.com ;點(diǎn)擊查看區(qū)域負(fù)責(zé)人電話
手機(jī):13811546370 / 13720091697 / 13720096040 / 13811548270 / 13811981522 / 18600440988 /13810279720 /13581546145

  • 暫無(wú)資料
  • 暫無(wú)資料
  • 暫無(wú)資料
  • 暫無(wú)資料
  • 暫無(wú)資料
主站蜘蛛池模板: 德令哈市| 饶河县| 南开区| 大同县| 宜黄县| 大港区| 沙田区| 西平县| 汉中市| 桐庐县| 错那县| 宁晋县| 清水河县| 常德市| 班戈县| 镇宁| 忻州市| 肇源县| 永泰县| 三门峡市| 建水县| 年辖:市辖区| 莱西市| 浮梁县| 沂南县| 昌黎县| 伊宁市| 寿光市| 芒康县| 彭泽县| 方正县| 大竹县| 平潭县| 博白县| 淳安县| 沈丘县| 德格县| 大化| 诸城市| 兖州市| 永仁县|