Android浮点数学表现

dby*_*rne 7 android android-ndk

我有一个Android应用程序,它使用NDK执行大量的浮点数学运算.

我刚买了一个新的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
Run Code Online (Sandbox Code Playgroud)

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

APP_ABI := armeabi armeabi-v7a
Run Code Online (Sandbox Code Playgroud)

我没有用NDK-r7重新编译我的代码,但我不明白为什么这会产生如此巨大的差异.知道什么是错的吗?

Ran*_*ku' 7

此StackOverflow问题可能是Galaxy Nexus性能不佳的原因:Galaxy Nexus - 在安装期间选择了错误的CPU ABI.

这似乎是一个错误.我也通过使用本机代码创建一个小项目来测试它,而Galaxy Nexus确实选择了错误的库(armeabi而不是armeabi-v7a).

我在http://code.google.com/p/android/issues/detail?id=25321上报告了此错误,并在错误上附加了示例项目.请注意它以引起Android工程师的注意.


Jim*_*myB 5

您可以尝试 APP_ABI := armeabi-v7a 仅强制使用v7a指令.
我可以想象新的CPU没有被检测为支持v7a指令,因此无FPU代码在运行时用作回退.