Raspberry Pi (ARM架构,BCM2835)上的浮点性能
Floating point performance on Raspberry Pi (ARM archetecture, BCM2835)
从阅读关于现代桌面处理器上浮点性能的其他问题来看,我的理解是,"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。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- OpenMP阵列性能较差
- 递归列出所有目录中的C++与Python与Ruby的性能
- 大小相等但成员数量不同的结构之间的性能差异
- 为什么constexpr的性能比正常表达式差
- 在类中使用随机生成器时出现性能问题
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 海湾合作委员会 ARM 性能下降
- GCC 和 Clang 代码性能的巨大差异
- 在容量内调整矢量大小时的性能影响
- 了解算法的性能差异(如果以不同的编程语言实现)
- 未达到的情况会影响开关外壳性能
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 哪种方法更好,性能明智
- C++ 特征库:引用的性能开销<>
- 与多个 for 循环与单个 for 循环 wrt 相关的性能从多映射获取数据
- 基于范围的 for 循环range_declaration中各种说明符之间的性能差异
- std::p mr::memory_resource 如何与 std::container 产生性能差异?
- Raspberry Pi (ARM架构,BCM2835)上的浮点性能