NEON可以对32位浮点数进行SIMD操作。但不会对64位浮点数进行SIMD操作。 VFU不是SIMD。它只能在一个元素上执行32位或64位浮点运算。
ARM是否支持64位浮点数的SIMD操作?
答案 0 :(得分:1)
这仅适用于支持ARMv8的处理器,并且仅在运行Aarch64指令集时才有效。这在Aarch32指令集中是不可能的。
但是大多数处理器都支持32位和64位标量浮点运算(即浮点单元)。
答案 1 :(得分:1)
ARMv8
在ARMv8中,可能:
fadd v2.2d, v0.2d, v1.2d
Minimal runnable example with an assert and QEMU user setup。
类似的ARMv7不能正常工作:
vadd.f64 q2, q0, q1
汇编失败,并显示:
bad type in Neon instruction -- `vadd.f64 q2,q0,q1'
Minimal runnable 32-bit float v7 code for comparison。
手册
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
,这表明不可能。