2011-12-23 81 views
7

我有一个Android application,它使用NDK来执行大量的浮点数学运算。Android浮点数学性能

我刚收购了一款新的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,但我不明白为什么这会造成如此巨大的差异。任何想法有什么不对?

+0

你可以量化'慢很多'吗? – WarrenFaith 2011-12-23 15:41:59

+0

@WarrenFaith我用实际数字更新了问题。 – dbyrne 2011-12-23 16:31:48

回答

5

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

+0

这工作。但是,这非常令人沮丧,因为现在我无法将所有手机支持的应用程序投放市场。我不想因为这个而发布两个不同的应用程序。 – dbyrne 2011-12-26 17:12:33

+0

就我个人而言,我一直在寻找兼容性的渲染方向。不仅用于支持不同类型的CPU,而且易于实现多处理器支持和可能的GPU利用率。 – harism 2011-12-28 22:48:48

+1

您可以在同一个应用程序中包含不同版本的本机库;请记住,libs是通过Java代码在运行时加载的。也许可以在您的应用程序中执行FPU检测,例如像[这里描述](http://stackoverflow.com/questions/8161184/detecting-fpu-presence-on-android),然后加载相应的本地库。 – JimmyB 2011-12-30 11:05:46

0

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

+0

我已经看到一款名为“2 GHz”的手机,实际上它是一款双核1 GHz手机,但我向你保证Galaxy Nexus有两个1.2 GHz处理器。 – dbyrne 2011-12-23 16:37:27

+0

你是对的:Galaxy Nexus拥有1.2 GHz处理器。 – Yury 2011-12-23 16:48:21

+0

您提出了一个很好的观点,即我应该多线程化计算代码。特别是因为将其并行化是微不足道的。 – dbyrne 2011-12-23 16:50:51

7

此StackOverflow问题可能是您的Galaxy Nexus性能较差的原因:Galaxy Nexus - wrong CPU ABI being selected during install time

这似乎是一个错误。我已经通过使用本机代码创建了一个小项目对它进行了测试,实际上Galaxy Nexus选择了错误的库(armeabi代替armeabi-v7a)。

我已经在http://code.google.com/p/android/issues/detail?id=25321上报告过这个bug,并附上了bug示例项目。请出演它以引起对Android工程师的关注。

+0

是的,这正是问题所在。出演。 – dbyrne 2012-02-09 13:54:36