Domanda

ho iniziato a giocare con l'androide NDK. Una delle cose che ho appena imparato è sulla creazione di un file di application.mk per specificare l'abi ARMv7.

Sto costruendo l'esempio san-angeles con i seguenti parametri.

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

Tuttavia, questo sembra funzionare esattamente alla stessa velocità come prima (cioè male). Am Ho appena GL limitato e non CPU limitato o è qualcosa che non va qui?

ho notato quando compilo che ottengo le seguenti opzioni della riga di comando emessa:

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

La cosa che mi preoccupa c'è la "softfp". Si parla del v7 abi, la roba VFP FPU e sto cercando di indovinare il "pollice" si riferisce alle istruzioni del "pollice-2" (anche se non so che cosa esattamente si tratta). Tuttavia che "softfp" non riguarda me. Non dovrebbe essere "hardfp"?

Chiunque ha ottenuto tutte le idee su queste questioni? Penso di essere probabilmente circa pronto per avviare l'attuazione del codice GL ES 2.0 per il mio HTC Desire, ma mi piacerebbe assicurarsi che sto ricevendo il miglior velocità possibile fuori di esso:)

Saluti di anticipo!

È stato utile?

Soluzione

Le opzioni di alimentazione al NDK interesserà solo il modo in cui il codice viene compilato. Non cambierà le librerie GL o qualsiasi altra cosa di quella parte della piattaforma, che sono sempre generato in modo appropriato. Se stai solo gettando geometria l'hardware GL, non avete intenzione di vedere una differenza.

Se volete vedere se le opzioni stanno avendo un effetto, scaricare (o creare) un semplice punto di riferimento che fa un mucchio di operazioni con valori del punto a doppia precisione galleggianti, e il tempo quanto tempo ci vuole per eseguire prima e dopo.

I = -mfloat-abi softp argomento determina come vengono passati valori a virgola mobile tra funzioni. softfp mezzi stanno sempre passati in registri interi o in pila. Se Android non ha specificato softfp, l'ARMv7-A versione della libreria si aspetta carri di presentarsi in registri hardware, e qualsiasi codice costruito per ARMv5TE si romperebbe.

"softfp" aggiunge un overhead poco ad alcune funzioni, ma le istruzioni per i valori muoversi dentro e fuori di registri FP sono economici su ARM, e la compatibilità ABI disponibile marchi utile.

Il "-mthumb" consente la generazione di pollice / code Thumb2. codice pollice tende ad essere un po 'più lento ma leggermente più piccola ARM equivalente; a volte i mezzi più piccoli avrete adattarsi meglio nella CPU i-cache e sarà effettivamente correre più veloce. La dimensione è sempre una preoccupazione su questi dispositivi, in modo da Thumb è abilitato di default.

In caso di dubbio, "braccio-EABI-objdump -d whatever.o" vi mostrerà un disassemblaggio del codice.

Aggiornamento: NDK r9b aggiunto sostenere per -mhard flottante. Questo permette di costruire librerie NDK convenzionati API hard-float per i target armeabi-V7A.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top