简介
SIMD全称Single Instruction Multiple Data,单指令多数据流,能够复制多个操作数,并把它们打包在大型寄存器的一组指令集。
以加法指令为例,单指令单数据(SISD)的CPU对加法指令译码后,执行部件先访问内存,取得第一个操作数;之后再一次访问内存,取得第二个操作数;随后才能进行求和运算。而在SIMD型的CPU中,指令译码后几个执行部件同时访问内存,一次性获得所有操作数进行运算。这个特点使SIMD特别适合于多媒体应用等数据密集型运算。
在微处理器中,单指令流多数据流技术则是一个控制器控制多个平行的处理微元,如X86中的SSE,AVX,Arm中的Neon,现在叫asimd。
在js运行环境中,目前还没有完美的线程方案来利用多核解码,那么我们可以优化至少让单核进行并行运算。这是chrome91和firefox89正式带来的WebAssembly SIMD技术。
测试对比
测试环境:
- CPU:Intel Xeon E3-1270 v6 @ 3.8GHz
- MEM:DDR4 2400MHz 16GBx2
- 浏览器:GoogleChrome 135.0.7049.96
SIMDvsWASM
可以看到,SIMD版解码在大多数场景下,CPU占用率只有WASM的1/3 。
WASM版在线demo
SIMD版在线demo
使用环境
看看能否使用 CanIUse