Raspberry Pi上的浮点性能(ARM体系结构,BCM2835)

时间:2014-07-20 10:40:07

标签: c++ c performance floating-point raspberry-pi

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

我的理解是,如果浮点数是在硬件中实现的,那么使用双数据类型会更慢,因为使用该数据类型的数学是通过使用浮点数据类型的软件实现的。因此,double更慢并且使用更多ram。

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

在Raspberry-Pi上,哪种数据类型是在硬件中实现的? (等价,哪个更快,漂浮还是双倍?)

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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