NEON可以对32位浮点数执行SIMD运算。但不支持64位浮点数的SIMD运算。 VFU不是SIMD。它只能在一个元素上执行32位或64位浮点运算。
ARM是否支持64位浮点数的SIMD运算?
NEON可以对32位浮点数执行SIMD运算。但不支持64位浮点数的SIMD运算。 VFU不是SIMD。它只能在一个元素上执行32位或64位浮点运算。
ARM是否支持64位浮点数的SIMD运算?
只有支持ARMv8并且运行Aarch64指令集的处理器才能实现此操作。在Aarch32指令集下是不可能实现的。
但是大多数处理器都支持32位和64位标量浮点运算(即浮点数单元)。
ARMv8
在ARMv8中,有可能:
fadd v2.2d, v0.2d, v1.2d
类似的ARMv7 不起作用:
vadd.f64 q2, q0, q1
汇编失败,错误信息如下:
bad type in Neon instruction -- `vadd.f64 q2,q0,q1'
手册
https://static.docs.arm.com/ddi0487/ca/DDI0487C_a_armv8_arm.pdf A1.5“高级SIMD和浮点支持”中提到:
SIMD指令提供打包的单指令多数据(SIMD)和单元素标量操作,并支持:
- AArch64状态下的单精度和双精度算术。
对于ARMv7,F6.1.27“VADD(浮点)”中提到:
<dt>
是向量元素的数据类型,在“sz”字段中编码。它可以具有以下值:当sz = 0时,为F32 当sz = 1时,为F16
但是没有 F64
,这表明不可能。