我有一个 Android application,它使用 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
我的
Application.mk
文件中有这个配置:APP_ABI := armeabi armeabi-v7a
我没有用 NDK-r7 重新编译我的代码,但我不明白为什么这会产生如此巨大的差异。知道出了什么问题吗?
最佳答案
您可以尝试使用APP_ABI := armeabi-v7a
仅强制使用 v7a 指令。
我可以想象新 CPU 没有被检测为支持 v7a 指令,因此在运行时使用 no-FPU 代码作为后备。
关于Android 浮点数学性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8617789/