【问题标题】:What is Vector Floating Point (VFP)?什么是矢量浮点 (VFP)?
【发布时间】:2021-02-05 02:18:28
【问题描述】:

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

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

VFP 是否能够进行硬件级 FP 计算?如果是的话,它和普通的FPU有什么区别?

【问题讨论】:

  • 尝试解码一个浮点值,进行算术运算,然后重新编码。然后你就会知道“加速”是什么意思。
  • VFP 是 ARM 对 FPU 的名称。 vector 是一个仍然保留的历史命名。内核可以仅是 VFPNEON/VFP 系统,您应该始终将 VFP 理解为只是 FPU。随着硅变得更便宜,大多数现代 ARM cpu 都有 NEON/VFP。但一如既往,请查阅具体的 CPU 文档!
  • 因为它与 gcc 相关,所以选项是 here。 ‘vfpv2’, ‘vfpv3’ 等 Gcc 必须为 ARM 上的 FPU 生成代码;此外,还有一个浮点参数传递约定。这是-mfloat-abi 选项。它与物理 FPU 不同。您是否混淆了这些概念?
  • @artlessnoise "VFP 是 ARM 对 FPU 的称呼" 这很有帮助。最令人困惑的部分是我的想法“好吧,VFP 看起来像 ARM 的 FPU,但......不是很喜欢它,因为如果是,我们为什么要给 -mfloat-abi=softfp 而不仅仅是 -mfloat-abi=hard?”但是阅读答案和您的评论,我想这是因为调用约定与第三方 PFU 有所不同,因为 VFP 是协处理器。这是正确的吗?
  • 由于 ARM 'vfp' 最初是一个协处理器和一个可选组件,因此某些系统会有 'vfp' 而其他系统则没有。为了适应这一点,发明了一种 ABI(用于调用函数),它不需要浮点寄存器作为参数约定。所有参数都在常规寄存器中传递。但是,当系统已知具有“vfp”时,这是低效的。由于大多数来自 ARMv6 及更高版本的应用处理器都具有“vfp”,因此许多系统使用专有的-mfloat-abi=hard

标签: floating-point arm fpu


【解决方案1】:

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,而软库可能只支持特定的指令集。

【讨论】:

  • 请注意,在 armv7-m 和 armv7-ar 文档中仍然使用 VFP 这个术语。
  • 另请注意,在 VFP 之前是 FPA。但是请尝试将这些仅视为诸如 thumb、thumb2、ARM、AARCH64 等指令集,它们可能会或可能不会与先前的指令集重叠(VFPv1、VFPv2 ......如 thumbv1、thumbv2、thumbv3...armv4、armv5、armv6 ...)。因此,您应该看到存在逻辑以及可能模拟逻辑功能的软 fpus(对于每个)。名称本身的含义(FPA、VFP、SIMD、...)是另一回事。不是我个人担心的事情,给我看一下说明和他们做了什么……nuf说。
猜你喜欢
  • 2017-07-22
  • 2010-11-28
  • 2010-12-03
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 2022-10-06
相关资源
最近更新 更多