ARM Contex-A9 NEON/VFP
Introduction
Xilinx Zynq-7000 AP SoC内部集成了一个双核ARM Contex-A9处理器。ARM Contex-A9处理器采用ARMv7架构,从下图可以看到,该架构内置SIMD(单指令多数据)引擎NEON和浮点计算单元VFPv3。
NEON支持的数据类型有:
- Unsigned integer U8 U16 U32 U64
- Signed integer S8 S16 S32 S64
- Integer of unspecified type I8 I16 I32 I64
- Floating-point number F16 F32
- Polynomial over {0,1} P8
VFPv3支持单精度浮点和双精度浮点
NEON和VFPv3共用寄存器组,同时指令集也是集成在一起的,都以V开头:V{<mod>}<op>{<shape>}{<cond>}{.<dt>}(<dest>}, src1, src2
NEON vs VFP
NEON只工作于向量模式下,而VFP则不能SIMD,尽管其名字中有"vector"。
对于浮点型,NEON只支持单精度浮点,而VFPv3既支持单精度浮点,也支持双精度浮点。BTW,ARMv8中的NEON也能支持双精度浮点。
VFP在NEON更早之前出现,主要是为了完成浮点运算,尽管称为vector,但实际上并不能完成SIMD操作,数据都是顺序处理的。BTW,Contex-A9中VFP实现了流水。
VFP是一种遗留技术,随着版本的变化,后续可能被抛弃(瞎说的)。