vlambda博客
学习文章列表

Burst 编译器,让Arm 架构中的Unity 项目性能最大化

Burst 编译器的最新技术可以帮助Unity 开发者们利用起Arm Neon 指令集,在安卓设备上,Arm 架构下的Unity 项目可借助Burst 编译器提高性能。


Unity 与Arm 在此前确立了合作伙伴关系,致力于提升安卓生态中数十亿由Arm 驱动的移动设备的游戏开发体验。


对于游戏开发者来说,性能就是一切。Arm 年复一年地改进CPU 与GPU 技术,为打造丰富体验而不断提高设备性能。最近,Arm发布了两款新产品:大幅提升了性能的Cortex-A78 以及Cortex-X1。这两种全新的硬件则由新的Arm 架构编译器技术——Burst 来补足。在开发游戏时,Burst 编译器会将游戏优化后转译为高效的二进制文件,让游戏能最大限度地利用起Arm 架构的性能。



Burst 介绍


Burst 是一种超前的编译器技术,使用数据科技栈(DOTS)和Job System制作的Unity 项目可借助Burst 技术提高运行性能。Burst 通过被称为“高性能C#(HPC#)”的子语言集完成编译,通过应用LLVM 编译器框架下的高级优化方法来实现设备能源的高效利用。


Burst 可以帮助APP利用并行机制。它使用起来是否简单,可以为CPU算法带去大量的性能增益。在下方视频中,你将看到启用Burst和未启用Burst两个demo环境的直接对比。



可以看到Burst 编译的代码可以在帧上计算更多的物理元素,让性能更高、硬件发热更少、能耗更低,可展现的内容也更吸引人。



Burst 原理介绍


Burst 在默认条件下就能带来更多性能增益,这是什么原理呢?


Burst 可将HPC# 转译成LLVM IR,一种LLVM 编译器框架使用的媒介语言,从而完全利用起LLVM 在Arm 架构下的代码生成功能,将程序的数据流转换成优化后的高效机器码。


下方图表展示了该流程。


Burst 编译器,让Arm 架构中的Unity 项目性能最大化


Burst 可以显示出HPC# 和DOTS 框架中的数组混叠限制,利用起LLVM 对硬件架构的了解, 这使Burst 可以根据针对Unity API 编写脚本的属性,进行有针对性的转换。



如何编写Burst 程序


Burst 可以编译使用了DOTS Jobs System 的C# 脚本。使用时,只需在Job 定义前添加一个[BurstCompile]属性:


  
    
    
  
[BurstCompile] struct MyJob : IJob { public NativeArray<float> Input; public NativeArray<float> Output; public void Execute() { for (int I = 0; I < Input.Length; i++) { Output[i] = Input[i] * Input[i]; } } }
右滑查看完整代码

在Jobs 菜单中的Busrt Inpsctor 内,我们可以看到生成的代码。注意,下方演示禁用了安全限制(Safety Checks),Burst 版本为1.3.3。


Burst 编译器,让Arm 架构中的Unity 项目性能最大化


在弹出的Burst Inspector 中,我们勾选了目标架构为ARMV8A_AARCH64,启用了Armv8-A 的代码生成功能。


Burst 编译器,让Arm 架构中的Unity 项目性能最大化

接着就能看到为C# 循环、及使用Neon 指令集的循环生成的AArch64 代码了。


Burst 编译器,让Arm 架构中的Unity 项目性能最大化

要想进一步了解如何使用Burst 编译器,请参阅指令说明手册。


Burst 编译器,让Arm 架构中的Unity 项目性能最大化


文中提及的相关链接:


[1] Unity DOTS:

https://unity.com/cn/dots


[2] Burst 指令说明手册:

https://docs.unity3d.com/Packages/[email protected]/manual/index.html


[3] Arm Neon 指令集:

https://developer.arm.com/documentation/dht0002/a/Introducing-NEON/NEON-architecture-overview/NEON-instructions


[4] Cortex-A78:

https://www.arm.com/products/silicon-ip-cpu/cortex-a/cortex-a78


[5] Cortex-X1:

https://www.arm.com/products/cortex-x




Burst 编译器,让Arm 架构中的Unity 项目性能最大化





 每一个“在看”,都是我们前进的动力