(Burst compiler,(Burst 突发、爆发/ compiler编译器),文中直接采用英文原说法Burst compiler.)
Burst compiler技术可以让 Unity项目开发人员利用 Arm处理器的 Neon指令集,在目标安卓设备上提高性能表现。
Unity 和 Arm 两家公司已经形成了合作伙伴关系,以增强Android生态系统中10亿多款Arm架构驱动的移动设备上手机游戏的开发体验。对于游戏开发者来说,性能表现是至关紧要的。
Arm于2020年5月底宣布了两种新产品,Cortex-A78 及 Cortex-X1,这些硬件的发展受益于 Arm架构下编译器技术的进步。编译器能确保你在开发高性能游戏时,转换和优化(代码)为高效的二进制文件,从而最大限度地利用Arm架构的特性。
关于 Burst
Burst 是一种先进的编译器技术,通过使用“新的面向数据的技术栈(DOTS)”和 Unity Job系统,可以用来加速 Unity项目的性能表现。
Burst 的工作方式是编译 C# 语言的一个子集,也就是高性能 C#(HPC#),通过部署构建在 LLVM编译器框架之上的高级优化,来更为有效地利用设备。
Burst 对于利用应用程序中的隐藏 并行性(parallelism)很有用处。使用 DOTS项目中的 Burst很容易,并且可以在 CPU绑定算法中释放出很大的性能优势。
Burst 编译的代码能够更快地计算具有更多的物理帧数,从而得到更好的性能、减少设备过热、更低的电池消耗、表现更多吸引人的内容。
Burst 工作原理
Burst 将 HPC# 代码转换为 LLVM IR,这是 LLVM编译器框架使用的一种中介语言。这允许编译器充分利用 LLVM 对 Arm架构代码生成的支持,从而生成围绕程序数据流优化的高效机器代码。此流程的图表如下所示:
如何编写 Brust程序
你可以通过 DOTS里 Unity Jobs系统,使用 Burst编译 C# 脚本。记得提前把[BurstCompile]属性加入菜单Job内:
我们可以使用在“Jobs”菜单中找到的“Burst”检视窗来查看将生成哪些代码。
注意在这个演示中,我们已经禁用了安全检查,并且正在使用的版本是 Burst1.3.3,如下图:
在我们选中的突发检查器里,
选择 ARMV8A_AARCH 64 为 ARMv8-A 启用代码生成:
现在可以看到为我们的 C# 循环生成的 AArch64 代码,包括使用 Neon指令集的核心循环: