我已经开始与Android NDK播放。其中一个我刚刚学到的一件事情是关于建立一个application.mk文件中指定的ARMv7 ABI。

我建立具有以下参数的SAN-洛杉矶例子。

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,但我想确保我获得最佳的速度出来吧:)

预先干杯!

有帮助吗?

解决方案

您提供的NDK的选项只会影响您的代码编译的方式。它不会改变的GL库或其他任何的平台,它们总是以适当的方式产生的一部分。如果你只是在GL硬件投掷几何,你不会看到一个区别。

如果你想看看你的选择是有一定影响,下载(或创建)一个简单的基准,做了一堆与双精度浮点值,而所花费的时间长之前和之后执行的操作。

在-mfloat-ABI = softp参数确定浮点值是如何函数之间传递。 softfp他们总是在整数寄存器或堆栈传递方式。如果Android的没有指定softfp,图书馆的的ARMv7-A版本所期望的漂浮在硬件寄存器展现出来,并用于ARMv5TE内置任何代码将打破。

“softfp”增加了一个小的开销的一些功能,但对于进出FP寄存器的移动值,所述指令在ARM便宜,和ABI兼容性提供使得它值得的。

在 “-mthumb” 能够产生的拇指/ Thumb2代码。拇指代码往往是有点慢,但有点比等效ARM小;有时小的手段,你会适应CPU高速缓存器中更好,实际上会运行得更快。大小始终是在这些装置上的担忧,因此拇指默认启用。

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

<强>更新:加入 NDK R9B 对于-mhard浮动支持。这使您可以建立与armeabi-V7A目标硬浮API约定NDK库。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top