【简介】
Burst是Unity的编译优化技术,优化了从C#代码编译成Native代码的过程,经过编译优化后代码有更高的运行效率。
在Unity中使用Burst很简单,在方法或类前加上[BurstCompile]特性即可。在构建时编译代码的步骤,Burst编译器会识别该特性对方法或类做编译优化。其适用于高性能计算的场景,逻辑复杂的场景不适用。
Burst编译的实现得益于已有的SIMD和LLVM技术。
【SIMD】
在现代 CPU 中,并行性操作大致分为三种类型:
- 指令级并行,主要由 cpu 流水线技术,乱序执行技术等技术完成
- 线程级并行,主要依靠多核多线程技术实现
- 数据级并行,主要依靠 SIMD (单指令多数据) 来实现
SIMD是CPU硬件设计的一部分,是的CPU可以同时对多个数据执行相同的操作。
指令执行时(指令由操作码和操作数构成)CPU先访问缓存,缓存分为指令缓存和数据缓存,如果缓存中有指令就读取,没有指令从内存中读取;读取数据的过程也类似。
以加法为例,对于5+2这个加法计算,最少需要四条指令:
- 将数值 5 加载到寄存器中(LOAD操作码)
- 将数值 2 加载到寄存器中(LOAD操作码)
- 将两个寄存器中的数值相加(ADD操作码)
- 将相加后的结果存储到指定的寄存器或内存中(STORE操作码)
在SISD(单指令单数据)中,每个指令只会取一次数据,而在SIMD(单指令多数据)中,一次指令会取多个数据,节省了CPU获取数据的时间。
一次性取出来的数放在向量寄存器中,但向量寄存器大小有限,在