ARMv8(也称为 AArch64 或 ARM64)的默认 FPU 是什么?

What is the default FPU of ARMv8 (also known as AArch64 or ARM64)?

提问人:boltragons 提问时间:3/8/2023 更新时间:3/16/2023 访问量:443

问:

在一些地方,据说 ARMv8 的默认 FPU 是 VFPv3/VFPv4(他们这么说,但没有指定是哪一个),而在其他地方,它是 NEON,而在其他一些地方,它仍然只是“FPU”。还有人说VFP已被弃用,或者只有它的“矢量”模式被弃用。这很令人困惑。因此,我想知道:

ARMv8 的默认 FPU 是什么?我知道我们可以在 VFP 和 NEON 之间进行选择,但我想知道哪一个是默认的。

此外,根据执行的指令,是否由不同的单元执行该指令?例如。。。即使 NEON 是默认 FPU,VFP 是否执行 FADD 指令?如果没有,该语句是否会转换为 ADD。F32?

当我意识到有 NEON 标量指令时,这种怀疑就更糟了!

最后一件事,如果 NEON 和 VFP 不再是 ARMv8 中的协处理器,并且它们的指令被添加到默认指令集中,那么它是如何工作的?

我知道有很多问题,但它们都与同一个问题有关。

欢迎任何和所有帮助,如果您从问题中不明白某些内容,我很乐意详细说明。

装配 浮点 ARM64 NEON

评论

1赞 fuz 3/8/2023
你指的是哪种操作模式?在 AArch32 模式下,FPU 为 NEON/VFPv4。在 AArch64 模式下,它是 ASIMD,类似于 NEON。从技术上讲,AArch64 上的 FPU 和 SIMD 之间可能存在区别,但由于 SIMD 是在通用计算机上构建的,因此它在很大程度上是学术性的。
0赞 Peter Cordes 3/8/2023
如果 NEON 和 VFP 不再是 ARMv8 中的协处理器,并且它们的指令已添加到默认指令集中,那么它是如何工作的?- 多年来的工作方式相同;FP 执行单元内置于 CPU 中,而不是单独的芯片。成为“协处理器”只是编程接口的问题,而不是 CPU 的物理设计,因为芯片可以容纳足够的晶体管来集成 FP(和 SIMD)执行单元。
1赞 fuz 3/8/2023
请注意,AArch32 和 AArch64 是 ARMv8 架构支持的不同指令集。ARMv7 仅支持 AArch32。AArch64 指令集与 AArch64 有很大不同。阅读 ARMv8 架构参考手册以了解更多信息!
0赞 boltragons 3/8/2023
@fuz我是AArch64。ARM 倾向于互换谈论 Neon 和 AdvSIMD,所以那里存在一些混淆,但我知道 ARMv8 又名 AdvSIMD 的 SIMD 引擎是 ARMv7 的 Neon 的演变。所以你告诉我浮点指令是在 AdvSIMD 中执行的?另外,在 AArch32 中,VFPv4 是默认值吗?因为说“NEON/VFPv4”有点多余。另外,参考手册在这方面真的很模糊!
1赞 fuz 3/9/2023
@boltragons 就指令编码而言,VFP3 仍然是一个协处理器。不过,我真的不了解霓虹灯。至于指令在哪个单元上执行,这是 CPU 的实现细节。AArch64 可能在内部使用与 AArch32 相同的单位。ASIMD 是全新的,不使用 VFP 品牌。没有连续性。

答:

2赞 solidpixel 3/15/2023 #1

该架构定义了指令编码 - 即指令位模式及其必须执行的操作。它还定义了特定功能的分组 - 即,如果您声称支持高级 SIMD,则必须实现这组指令。

该体系结构没有处理指令的硬件单元的概念。这完全是特定微体系结构的实现定义的行为。scalar-fp 和 vector-fp 可以在相同的硬件流水线上运行吗?是的。它们可以在完全不同的硬件管道上运行吗?是的。

忽略原始 VFP 指令的协处理器式编码 - 这是一个可以追溯到 ARM9 和 ARM11 的历史怪癖。今天,它只是一个指令位模式,就像任何其他指令位模式一样,并不意味着任何特定的实现。

鉴于您关心的主要是实施细节 - 您试图解决的实际问题是什么?你为什么关心东西在哪个单元上运行?