【发布时间】:2021-02-05 02:18:28
【问题描述】:
有人告诉我,VFP 是 ARM 处理器中使用的浮点运算的硬件加速器。
但它如何“加速”处理器?我知道硬浮动和软浮动的基本概念,但在我看来 VFP 并不完全属于其中任何一个,因为我必须提供不同的编译器选项才能使用 VFP,例如用于 gcc 的-mfloat-softfp。所以VFP不仅仅是一种PFU,对吧?
VFP 是否能够进行硬件级 FP 计算?如果是的话,它和普通的FPU有什么区别?
【问题讨论】:
-
尝试解码一个浮点值,进行算术运算,然后重新编码。然后你就会知道“加速”是什么意思。
-
VFP 是 ARM 对 FPU 的名称。 vector 是一个仍然保留的历史命名。内核可以仅是 VFP 或 NEON/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