ARM是否支持64位浮点数的SIMD运算?

4

NEON可以对32位浮点数执行SIMD运算。但不支持64位浮点数的SIMD运算。 VFU不是SIMD。它只能在一个元素上执行32位或64位浮点运算。

ARM是否支持64位浮点数的SIMD运算?


抱歉,您没有提供问题。 - auselen
是的和不是的。我们在讨论AArch64还是只有32位? - Notlikethat
@auselen:问题在标题中已经提出,但是在正文中没有重复。 - Peter Cordes
@Notlikethat,这不更多是关于ARMv8与ARMv7的区别吗?我认为ARM刚刚发布了一款32位的ARMv8芯片。 - Z boson
1
@Zboson...在v8中,A32/T32指令集仍然具有与v7中ARM/Thumb相同的NEON指令。实际上,Cortex-A32只有助于消除“v8 == AArch64”谬论。 - Notlikethat
显示剩余2条评论
2个回答

3

只有支持ARMv8并且运行Aarch64指令集的处理器才能实现此操作。在Aarch32指令集下是不可能实现的。

但是大多数处理器都支持32位和64位标量浮点运算(即浮点数单元)。


你是说ARM可以进行64位SIMD操作吗?如果是,请提供任何相关链接,我想了解更多信息。 - Asd Dfg
例如:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0024a/CEGDJGGC.html。第7.1段中Aarch64 Neon部分的最后一个要点。 - Dric512
感谢Dric512提供的链接,ARMv7不支持双精度向量操作,但ARMv8支持双精度向量操作。 - Asd Dfg

2

ARMv8

在ARMv8中,有可能:

fadd v2.2d, v0.2d, v1.2d

带有断言和QEMU用户设置的最小可运行示例

类似的ARMv7 不起作用

vadd.f64 q2, q0, q1

汇编失败,错误信息如下:

bad type in Neon instruction -- `vadd.f64 q2,q0,q1'

最小可运行的32位浮点v7代码以进行比较

手册

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,这表明不可能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接