android - Produrre codice NDK ottimizzato per più architetture?


1 Answers

Ottima risposta, proprio come aggiungere che dovresti usare

APP_ABI := all

questo compilerà 4 file binari, armv5, armv7, x86 e mips

potresti aver bisogno di una nuova versione di ndk

android c gcc jni android-ndk

Ho un codice C per Android che fa un sacco di crunch a basso livello. Mi piacerebbe sapere quali impostazioni dovrei usare (ad esempio per i miei file Android.mk e Application.mk) in modo che il codice prodotto venga eseguito su tutti gli attuali dispositivi Android, ma sfrutti anche le ottimizzazioni per chipset specifici. Sto cercando le impostazioni di default Android.mk e Application.mk da usare e voglio evitare di dover sparpagliare il mio codice C con le filiali #ifdef.

Ad esempio, sono a conoscenza del fatto che ARMv7 ha istruzioni in virgola mobile e alcuni chip ARMv7 supportano le istruzioni NEON e che l'ARM predefinito non supporta nessuno di questi. È possibile impostare i flag in modo che io possa creare ARMv7 con NEON, ARMv7 senza NEON e la build ARM predefinita? Sono sicuro di come fare gli ultimi due, ma non tutti 3. Sono cauto riguardo alle impostazioni che uso poiché presumo che le impostazioni predefinite correnti siano le impostazioni più sicure e quali siano le altre opzioni.

Per l'ottimizzazione specifica GCC, sto usando i seguenti flag:

LOCAL_CFLAGS=-ffast-math -O3 -funroll-loops

Ho controllato tutti e 3 questi velocizzando il mio codice. Ci sono altri comuni che potrei aggiungere?

Un altro suggerimento che ho è quello di aggiungere "LOCAL_ARM_MODE: = arm" ad Android.mk per abilitare una maggiore velocità sui nuovi chip (anche se sono confuso esattamente su cosa fa e cosa succede sui chip più vecchi).



Related