2010-06-09 37 views
13

我已经开始玩android NDK了。我刚刚学到的一件事就是创建一个application.mk文件来指定armv7 abi。用android NDK获取硬件浮点数

我正在用以下参数构建san-angeles示例。

APP_MODULES  := sanangeles 
APP_PROJECT_PATH := $(call my-dir)/../ 
APP_OPTIM  := release 
APP_ABI   := armeabi-v7a 

但是,这似乎运行的速度与之前(即严重)的速度完全相同。我只是GL限制,而不是CPU限制或在这里是错误的?

当我编译,我得到的发出的以下命令行选项,我注意到:

-march=armv7-a -mfloat-abi=softfp -mfpu=vfp -mthumb 

令我担心有“softfp”的事情。有提到v7 abi,​​VFP fpu的东西,我猜“拇指”是指“拇指2”的指示(虽然我不知道这些是什么)。然而,“softfp”的确关心我。它不应该是“hardfp”吗?

任何人对这些问题有任何想法?我想我大概准备开始实施一些GL ES 2.0代码为我的HTC Desire,但我想确保我获得最佳的速度出来的:)

干杯提前!

回答

32

您提供给NDK的选项只会影响您的代码编译方式。它不会更改GL库或其他平台组成部分,它们总是以适当的方式生成。如果你只是在GL硬件上投掷几何图形,你就不会看到差异。

如果您想查看您的选项是否有效,请下载(或创建)一个简单的基准测试,该测试用双精度浮点值执行一系列操作,以及执行前后需要执行多长时间。

的-mfloat-ABI = softp参数确定浮点值是如何函数之间传递。 softfp意味着它们总是在整数寄存器或堆栈中传递。如果Android没有指定softfp,那么ARMv7-A版本的库会期望在硬件寄存器中显示浮点数,并且为ARMv5TE构建的任何代码都会中断。

“softfp”增加了一个小的开销的一些功能,但对于进出FP寄存器的移动值的指令是廉价上ARM,和设置在ABI兼容性使得它值得的。

的 “-mthumb” 能够产生的拇指/ Thumb2代码。 Thumb代码比较慢,但比同等的ARM稍微小一些;有时候更小意味着你可以更好地适应CPU缓存,并且实际上运行得更快。大小始终是这些设备所关注的,因此默认情况下启用了Thumb。

有疑问时,“手臂-EABI-objdump的-d whatever.o”会告诉你你的代码的拆卸。

更新:NDK r9b增加了对-mhard-float的支持。这使您可以为armeabi-v7a目标构建具有硬浮点API约定的NDK库。

+1

对不起,我一定错过了你回答这个问题的事实。很好的回答:) – Goz 2010-06-28 13:01:45