Raspberry Pi 上的浮点性能(ARM 架构,BCM2835)

Posted

技术标签:

【中文标题】Raspberry Pi 上的浮点性能(ARM 架构,BCM2835)【英文标题】:Floating point performance on Raspberry Pi (ARM archetecture, BCM2835) 【发布时间】:2014-07-20 10:40:06 【问题描述】:

通过阅读有关现代桌面处理器浮点性能的其他问题,我理解“哪个更快,双倍还是浮点?”这个问题的答案。取决于这些类型中的哪一种是在硬件中实现的,还是在 CPU 的 ALU(我认为是算术逻辑单元)中实现的。

我的理解是,如果 float 是在硬件中实现的,那么使用 double 数据类型会更慢,因为使用该数据类型的数学是通过使用 float 数据类型的软件实现的。因此 double 速度较慢并使用更多内存。

另一方面,如果 double 在硬件中实现,我的理解是必须进行转换(有点像截断)才能转换为浮点数据类型。因此使用浮点数会更慢,尽管它会使用更少的内存。

在 Raspberry-Pi 上,硬件实现了哪种数据类型? (等效地,哪个更快,float 还是 double?)

我尝试阅读 BCM2835 数据表的有限部分,但没有找到我要搜索的信息。

我应该解释一下,我想不出一个测试性能的好方法,所以我没有运行任何定时测试。我所说的好方法是指评估所有可能的计算,或者至少是我应该测试的计算,以及能够给出一致结果的测试,其差异足够大,可以合理确定地得出结论,一种数据类型比其他。

【问题讨论】:

@EJP 哦,对了,它们都实现了?我认为GPU只能处理浮点数,对吗?在哪种情况下,哪个更快? (在 CPU 上)浮点数,因为每个周期可能会通过数据总线发送更多浮点数? 根据en.m.wikipedia.org/wiki/ARM_architecture,ARM 硬件支持单精度和双精度 @harmic 谢谢你,我的猜测是浮点数可能会更快,如果可以一次传输多个值以用于计算? (例如,对数组中的值求和,或计算傅立叶谱中的功率,即平方和。) Raspberry Pi 硬件支持单精度和双精度浮点运算。 The CPU datasheet 这么说。有关向量浮点单元的描述,请参见第 1.5.9 段。请注意,某些版本的 Raspbian 不使用浮点硬件。 斯蒂芬的回答表明没有区别,到目前为止您的时间表明没有区别,凭经验不一定有区别,取决于总线和架构。这很可能是 64 位数据总线,如果处理器在单倍和双倍之间没有性能差异,那么您应该看不到差异。做一个简单的测试,拆开它并发布两者以及你是如何计时的,也许我们可以解释你为什么看到你所看到的或者为什么你没有看到差异。 【参考方案1】:

根据Wikipedia 的说法,Raspberry Pi 使用 ARM1176JZF-S(*) 作为其 CPU,它具有对流水线单精度和双精度浮点的硬件支持。您可以在TRM on ARM's website 中查找确切的延迟和吞吐量数据。短版:单双的延迟相当;双精度乘法的吞吐量是单精度的一半。

请注意,浮点仅在 1176 上的 arm 模式下支持; “thumb 1”指令集根本不允许访问浮点寄存器。

(*) 1176 是古老的。我有点惊讶没有找到像 A9 或 M4 这样更现代的东西。

【讨论】:

我认为他们选择使用 ARM1176JZFS 是为了降低成本(我记得过去读过一些更深入的内容but this is best source I could find)。 芯片厂商更换内核是有成本的,如果不需要,为什么要改变? @dwelch:对于所有学习修补如此过时的东西的程序员来说,也需要付出代价,因为 RPi 经常被想要学习 ARM 汇编的人使用。拥有带 Thumb2 和 NEON 的 armv7 对他们中的许多人来说会更有用。显然,这是一个重要的权衡,我不认为 RPi 会是最前沿的(这就是为什么我只是稍微感到惊讶=)。 我不会走那么远,基于 arm 的产品中有非常非常小的比例甚至 arm11 更不用说你所说的了。对于你所说的使用 beaglebone 而不是树莓派,对于基本的手臂东西,树莓派或 beaglebone 很好(或其他一长串)

以上是关于Raspberry Pi 上的浮点性能(ARM 架构,BCM2835)的主要内容,如果未能解决你的问题,请参考以下文章

为 ARM6 交叉编译 Node.js (Raspberry Pi)

.NET Core Docker Image for Linux-arm (Raspberry pi)

2014年基于Raspberry Pi的5大项目

Ubuntu 22.04 LTS (Jammy Jellyfish) Daily Build安装镜像PC ARM Raspberry Pi

使用单声道时的 Serial.IO.Ports 问题,适用于 dotnet core 3.1 / arm / raspberry pi 4

Raspberry Pi详细资料大全