2011-12-23 66 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