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

Floating point performance on Raspberry Pi (ARM archetecture, BCM2835)

本文关键字:性能 BCM2835 Pi ARM 架构 Raspberry      更新时间:2023-10-16

从阅读关于现代桌面处理器上浮点性能的其他问题来看,我的理解是,"double和float哪个更快?"这个问题的答案取决于这些类型中的哪一种是在硬件中实现的,或者在CPU的ALU(算术逻辑单元,我认为)中实现的。

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

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

在树莓派上,哪种数据类型是在硬件上实现的?(同样地,float和double哪个更快?)

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

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

树莓派使用ARM1176JZF-S(*)作为其CPU,根据Wikipedia,它具有流水线单精度和双精度浮点数的硬件支持。您可以在ARM网站上的TRM中查找准确的延迟和吞吐量数据。简而言之:单次和双次的延迟是相当的;双精度乘法的吞吐量是单精度乘法的一半。

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

(*) 1176是。我有点惊讶,没有找到一些更现代的东西,如A9或M4。