2010-06-09 82 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