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

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

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

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

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

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

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

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

最佳答案

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

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

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

关于c++ - Raspberry Pi 上的浮点性能(ARM 架构,BCM2835),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24849660/

相关文章:

c++ - 使用指南 : shared versus normal pointers

将单词生成为 C、C++ 代码的 PHP 代码

c++ - 如何使用 C++ 流输出小数点后 3 位数字?

c - 如何以root身份执行命令

mysql - 我可以合理地期望每秒向 MySQL 服务器写入多少次?

android - 加快 Android 动态 View 创建速度

c++ - OpenMP:为什么这个应用程序有时会扩展?

c - C 中的字符串连接

c - 仅使用套接字实现单进程管道

performance - 浏览器可能无法理解 gzip 内容的原因