什么是矢量浮点数 (VFP)?

What is Vector Floating Point (VFP)?

有人告诉我 VFP 是 ARM 处理器中使用的浮点运算的硬件加速器。

但是它是如何“加速”处理器的呢?我知道 hard-floating 和 soft-floating 的基本概念,但在我看来 VFP 并不完全属于任何一种,因为我必须提供不同的编译器选项才能使用 VFP,例如 -mfloat-softfp for gcc。所以VFP不仅仅是一种PFU,对吧?

VFP可以进行硬件级的FP计算吗?如果是这样,它与普通 FPU 有何不同?

ARM fpus 随着时间的推移而发展,有一段时间这个术语是 VFP。汇编语言指令仍然受支持 AFAIK。 (我不使用新的汇编语言我在各种内核上使用旧的东西,现在我使用的可能不是 VFP 汇编它可能在中间的某个地方)。

当时 FPU 似乎仍然是协处理器,第三方供应商可能没有这种特性,但您可以将协处理器添加到内核并使用 MRS/MSR 访问说明。我今天没看,但当时 VFP 指令只不过是 MRS/MSR 协处理器访问指令。汇编语言解决了这个问题,因此您可以要求添加两个寄存器,而不必知道具体细节是什么。

ARM(以及其他所有人)的浮点解决方案随着时间的推移而发展,这个术语不再用于正常对话(至少对于 ARM)。

它如何加速处理器是因为它是连接到处理器的附加逻辑(就像缓存加速处理器一样),我们程序员将此工作卸载到该协处理器。所以我们可以使用普通的 ARM 指令集并进行软浮点运算,而定点数学需要花费很多指令。或者您可以将操作传递给协处理器,它的逻辑可以直接完成工作并更快地为您提供结果。最终结果是整体表现更好。与在高速公路上超速行驶并要求乘客为您打开啤酒时一样,您正在卸载该工作...

就 ARM 而言,浮点指令作为针对此逻辑的指令映射到内核中,无论是像过去那样的协处理器还是直接在内核中实现(如果今天它是这样工作的,我仍然需要在 ARM 中启用协处理器来启用 FPU,所以我怀疑它们仍然是某种形式的协处理器。

x86 和其他人是如何做到的是一个单独的话题,它可能相似也可能不相似,当然在早期 8087 是一个单独的协处理器芯片,但随着 ARM 这些东西的发展。最好的解决方案是让核心能够直接接受指令,但您仍然可以卸载一些东西并获得整体性能提升(想想视频卡)。


重新阅读你的问题

来自当前的 ARM 文档:

矢量浮点 (VFP) 架构是对 ARM ® 架构的协处理器扩展。它提供单精度和双精度浮点运算,如 ANSI/IEEE Std 所定义。 754-1985 IEEE 二进制浮点运算标准。此文档在下文中称为 IEEE 754 标准。

您可以从那里读到这是 ARMv5 ARM ARM。即 arm7/arm9 天。

当您看到与 ARM 相关的 VFP 时,只需想到 FPU 或浮点指令集。它是一个直接连接到 ARM 内核的协处理器(如果您为此付费并将其编译到您的内核中)并且 ARM 内核“执行”这些指令。

由于内核和功能的组合以及每个芯片供应商可以做什么和不能做什么,特定组合可能没有硬 fpu,你必须使用软 fpu,软库可能只支持特定指令集.