iPhone4和iPad2:定点运算优于浮点运算
我听说iphone4和iPad有一个名为VFP的fpu,它在某种程度上优化了浮点运算,甚至允许SIMD(尽管GCC是否利用了这一点值得怀疑)。然而,我已经读到,对于一些Android设备,使用定点的速度比使用浮点的速度快20倍iPhone4和iPad2:定点运算优于浮点运算,iphone,android,ipad,floating-point,fpu,Iphone,Android,Ipad,Floating Point,Fpu,我听说iphone4和iPad有一个名为VFP的fpu,它在某种程度上优化了浮点运算,甚至允许SIMD(尽管GCC是否利用了这一点值得怀疑)。然而,我已经读到,对于一些Android设备,使用定点的速度比使用浮点的速度快20倍 在这些设备中使用定点算法而不是浮点算法来实现我的代码中的浮点密集部分有什么好处。iPhone 3G armv6 CPU有一个VFP流水线浮点单元,它的吞吐量比在整数中进行同样的计算要高。GCC不支持为流水线生成计划的VFP指令。iPhone3GS和iPhone4ARMV7
在这些设备中使用定点算法而不是浮点算法来实现我的代码中的浮点密集部分有什么好处。iPhone 3G armv6 CPU有一个VFP流水线浮点单元,它的吞吐量比在整数中进行同样的计算要高。GCC不支持为流水线生成计划的VFP指令。iPhone3GS和iPhone4ARMV7CPU没有流水线VFP单元,因此在某些浮点序列上实际上比iPhone3G稍慢;但是armv7处理器在可矢量化的短浮点上速度更快,因为它使用了NEON并行矢量单元。一些Android设备CPU根本没有任何硬件浮点单元,因此操作系统使用软件模拟FP,这可能比整数或定点慢一个数量级以上 一般的经验法则可能是,如果您的算法只能处理24位尾数精度,并且不在浮点和整数之间进行大量转换,那么在iOS上使用短浮点。它几乎总是更快 但是如果你想用你的C代码(使用NDK)支持旧的Android设备,可以使用缩放整数
如果你的应用程序没有进行大量的数字运算,那么对于一个低于0.1%的典型应用程序来说,上述所有操作都不会产生明显的影响。iPhone 3G armv6 CPU有一个VFP流水线浮点单元,它的吞吐量比用整数进行同样的计算要高。GCC不支持为流水线生成计划的VFP指令。iPhone3GS和iPhone4ARMV7CPU没有流水线VFP单元,因此在某些浮点序列上实际上比iPhone3G稍慢;但是armv7处理器在可矢量化的短浮点上速度更快,因为它使用了NEON并行矢量单元。一些Android设备CPU根本没有任何硬件浮点单元,因此操作系统使用软件模拟FP,这可能比整数或定点慢一个数量级以上 一般的经验法则可能是,如果您的算法只能处理24位尾数精度,并且不在浮点和整数之间进行大量转换,那么在iOS上使用短浮点。它几乎总是更快 但是如果你想用你的C代码(使用NDK)支持旧的Android设备,可以使用缩放整数
如果你的应用程序没有进行大量的数字运算,那么对于一个低于0.1%的典型应用程序来说,上述任何一项都不会产生明显的影响。正如hotpaw2所说,iPhone4和iPad2都有硬件浮点,因此,在缺乏此类硬件的平台上,您不会看到数量级的加速 这就是说,NEON向量单元确实支持整数运算和浮点运算,并且可以通过将它们转换为定点问题来加速某些运算但是,除非您真正了解自己在做什么,并且准备编写关键例程的汇编实现,否则您将看不到任何好处
如果适合您的问题,请坚持使用浮点。如果您需要提高性能,我保证跟踪应用程序的执行情况将带来许多更好的调整机会。正如hotpaw2所说,iPhone 4和iPad 2都有硬件浮点,因此您不会看到在缺乏此类硬件的平台上获得的数量级加速 这就是说,NEON向量单元确实支持整数运算和浮点运算,并且可以通过将它们转换为定点问题来加速某些运算但是,除非您真正了解自己在做什么,并且准备编写关键例程的汇编实现,否则您将看不到任何好处 如果适合您的问题,请坚持使用浮点。如果您需要提高性能,我保证跟踪应用程序的执行情况将带来许多更好的调优机会