Burst 编译器,让Arm 架构中的Unity 项目性能最大化
Posted Unity官方平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 程序
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];
}
}
}
文中提及的相关链接:
[1] Unity DOTS:
https://unity.com/cn/dots
[2] Burst 指令说明手册:
https://docs.unity3d.com/Packages/com.unity.burst@1.3/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 项目性能最大化的主要内容,如果未能解决你的问题,请参考以下文章
Unity AR Foundation Xcode 项目中架构 arm64 的未定义符号
游戏开发进阶篇教你在Windows平台编译tolua runtime的各个平台库(Unity | 热更新 | tolua | 交叉编译)
游戏开发进阶篇教你在Windows平台编译tolua runtime的各个平台库(Unity | 热更新 | tolua | 交叉编译)