iPhone 4和iPad 2:定点算术优于浮点的优点

时间:2011-04-01 03:49:54

标签: iphone android ipad floating-point fpu

我听说iPhone 4和iPad有一个名为VFP的fpu,它在某种程度上优化了浮点运算,甚至允许SIMD(尽管GCC是否利用了这一点是值得怀疑的)。但是,我已经读到,对于某些Android设备,使用固定点超过浮点数的加速可以导致性能提高20倍。

在这些设备中使用浮点算法实现我的代码的浮点密集部分有什么好处。

2 个答案:

答案 0 :(得分:7)

iPhone 3G armv6 CPU有一个VFP流水线浮点单元,其吞吐量高于进行相同的整数计算。 GCC支持生成计划用于流水线操作的VFP指令。 iPhone 3GS和iPhone 4 armv7 CPU没有流水线VFP单元,因此在某些浮点序列上实际上比iPhone 3G略慢;但是armv7处理器在可矢量化的短浮点处更快,因为它具有NEON并行向量单元。有些Android设备CPU根本没有任何硬件浮点单元,因此操作系统使用FP的软件仿真,这可能比整数或定点慢一个数量级。

一般的经验法则可能是,如果您的算法只能处理24位尾数精度,并且不在float和integer之间进行大量转换,请在iOS上使用短浮点。它几乎总是更快。

但是如果你想用你的C代码支持旧的Android设备(使用NDK),请使用缩放的整数。

如果你的应用程序没有进行大量的数字运算,对于一个低于0.1%的典型应用程序,以上都不会产生明显的差异。

答案 1 :(得分:1)

正如 hotpaw2 所说,iPhone 4和iPad 2都有硬件浮点,所以你不会看到你在缺乏这种硬件的平台上获得的数量级加速

也就是说,NEON向量单元确实支持整数运算以及浮点运算,并且可以通过将它们转换为定点问题来加速某些运算。 然而,除非您真正了解自己在做什么,并准备编写关键例程的汇编实现,否则您将看不到任何好处。

如果适合您的问题,请坚持使用浮点数。如果您需要提高性能,我保证跟踪应用程序的执行将会提供更好的调优机会。