问题描述
有人告诉我,VFP 是 ARM 处理器中使用的浮点运算的硬件加速器。
但它如何“加速”处理器?我知道硬浮动和软浮动的基本概念,但在我看来 VFP 并不完全属于任何一种,因为我必须提供不同的编译器选项才能使用 VFP,例如 -mfloat-softfp
用于 gcc。所以VFP不只是一种PFU,对吧?
VFP 是否能够进行硬件级别的 FP 计算?如果是这样,它与普通 FPU 有何不同?
解决方法
ARM fpu 随着时间的推移而演变,其中一个术语是 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并且软库可能仅支持某些指令集。