Frage

Ich habe Spiel mit dem Android NDK begonnen. Eines der Dinge, die ich habe, ist gerade gelernt, über eine application.mk-Datei erstellen, das ARMv7 abi angeben.

Ich baue das san-angeles Beispiel mit den folgenden Parametern.

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

Allerdings scheint dies genau die gleiche Geschwindigkeit zu laufen wie vorher (also schlecht). Bin ich nur GL beschränkt und nicht die CPU beschränkt oder ist etwas falsch hier?

Ich habe bemerkt, wenn ich kompilieren, dass ich die folgenden Befehlszeilenoptionen emittiert erhalten:

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

Die Sache, die mich beunruhigt, gibt es die „softfp“. Es ist die Rede von dem v7 abi, die VFP FPU Sachen und ich vermute, der „Daumen“ bezieht sich auf die „Daumen-2“ Anweisungen (Obwohl ich nicht weiß, was genau diese sind). Jedoch, dass „softfp“ tut mir Sorge. Sollte es nicht "hardfp" sein?

got Wer irgendwelche Ideen zu diesen Fragen? Ich glaube, ich bin wahrscheinlich über bereit, einige GL ES 2.0-Code für mein HTC Desire zu Beginn der Umsetzung, aber ich möchte sicherstellen, ich bin immer die bestmögliche Geschwindigkeit aus ihm heraus:)

Prost im Voraus!

War es hilfreich?

Lösung

Die Optionen, die Sie zum NDK liefern wirkt sich nur auf die Art und Weise Ihren Code kompiliert wird. Es wird nicht den GL-Libs oder irgendetwas anderen Teil der Plattform ist, dass ändern, das in geeigneter Art und Weise immer erzeugt werden. Wenn Sie nur Geometrie an der Hardware GL werfen, werden Sie keinen Unterschied sehen werden.

Wenn Sie sehen möchten, wenn Sie einen Effekt hat, herunterladen (oder erstellen) einen einfachen Maßstab, der eine Reihe von Operationen mit doppelter Genauigkeit Gleitkommazahlen des Fall ist, und die Zeit, wie lange es dauert, vor und nach auszuführen.

Die -mfloat-abi = softp Argument legt fest, wie Gleitkommawerte zwischen Funktionen übergeben werden. softfp bedeutet, dass sie immer in Integer-Register oder auf dem Stack übergeben. Wenn Android nicht softfp angeben, würde die ARMv7-A-Version der Bibliothek Schwimmer erwartet in Hardware-Registern zu zeigen, und jeder Code für ARMv5TE gebaut brechen würde.

„softfp“ fügt ein wenig Aufwand auf einige Funktionen, aber die Anweisungen für Werte in und aus fp Register sind billig auf ARM zu bewegen, und die ABI-Kompatibilität macht, vorausgesetzt, es lohnt sich.

Die "-mthumb" ermöglicht die Erzeugung von Thumb / Thumb2 Code. Thumb-Code neigt etwas langsamer zu sein, aber ein wenig kleiner als äquivalent ARM; manchmal kleinere Mittel werden Sie passen besser in der CPU-I-Cache und tatsächlich schneller laufen. Größe ist immer ein Problem auf diesen Geräten, so Thumb standardmäßig aktiviert ist.

Im Zweifelsfall "Arm-EABI-objdump -d whatever.o" finden Sie eine Demontage des Codes zeigen.

Update: NDK R9b hinzugefügt Unterstützung für -mhard-Schwimmer. Auf diese Weise können Sie NDK Bibliotheken mit Hard-float API Konventionen für armeabi-V7A Ziele.

bauen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top