Android浮点mathperformance

我有一个Android应用程序 ,它使用NDK来执行大量的浮点math运算。

我刚刚获得了一个新的Galaxy Nexus。 令我惊讶的是,我的应用运行速度比应该慢。 我怀疑这是因为大多数设备正在使用硬件加速和Galaxy Nexus不是。 如果我执行不需要浮点运算的操作,Galaxy Nexus将执行我期望的操作。

以下是几款器件的CPU / GPU规格和采样时序。 我已经规范了统计数据以考虑显示分辨率:

Droid CPU: TI OMAP 3430 (ARM Cortex-A8 600 MHz underclocked to 550 MHz) GPU: PowerVR SGX530 Instruction Set: ARMv7 Test Run: 1,980 pixels per second Galaxy Nexus CPU: TI OMAP 4460 (ARM Cortex-A9 dual-core 1.2 GHz) GPU: PowerVR SGX540 Instruction Set: ARMv7 Test Run: 2,253 pixels per second Droid Incredible CPU: QSD8650 (Qualcomm Snapdragon 1 GHz) GPU: Adreno 200 Instruction Set: ARMv7 Test Run: 4,571 pixels per second 

我在我的Application.mk文件中有这个configuration:

 APP_ABI := armeabi armeabi-v7a 

我没有用NDK-r7重新编译我的代码,但是我不明白为什么这会造成如此巨大的差异。 任何想法是什么错误?

Solutions Collecting From Web of "Android浮点mathperformance"

您可以尝试使用APP_ABI := armeabi-v7a来强制使用v7a指令。
我可以想象,新CPU不会被检测为支持v7a指令,因此在运行时使用no-FPU代码作为后备。

这个StackOverflow问题可能是您的Galaxy Nexus性能不佳的原因: Galaxy Nexus – 在安装期间select了错误的CPU ABI 。

这似乎是一个错误。 我已经通过使用本地代码创build了一个小项目来testing它,实际上Galaxy Nexusselect了错误的库(armeabi而不是armeabi-v7a)。

我在http://code.google.com/p/android/issues/detail?id=25321上报告了这个错误,并在错误中附加了示例项目。 请明星给Android工程师带来关注。

我认为问题是处理器中有2个内核。 因此,你有一个核心600兆赫兹。 所以如果你的math方法只使用一个线程,这可以是一个答案。 虽然,我不明白为什么是2倍慢(可比较的时间可以解释)。