NDK supporta ARM Advanced SIMD, comunemente noto come Neon, un componente opzionale del set di istruzioni ARMv7 e ARMv8. Il neon fornisce scalare/vettore e registri (condivisi con la FPU) paragonabili a MMX/SSE/3DNow! nel mondo x86.
Tutti i dispositivi Android basati su ARMv8 ("arm64") supportano Neon. Quasi tutti basati su ARMv7 ("32 bit") I dispositivi Android supportano Neon, inclusi tutti i dispositivi forniti con Livello API 21 o successivo. NDK attiva Neon per impostazione predefinita per entrambi.
Se scegli come target dispositivi molto vecchi, puoi filtrare quelli non compatibili nella Google Play Console. Puoi anche usare la console della tua app per vedere quante i dispositivi interessati.
In alternativa, per la massima compatibilità, il codice a 32 bit può eseguire per confermare che il codice Neon possa essere eseguito sul dispositivo di destinazione. Un'app può eseguire questo controllo utilizzando una delle opzioni menzionate Funzionalità della CPU.
Puoi utilizzare Funzionalità intrinseche al neon in codice C e C++ per sfruttare l'estensione SIMD avanzata. La Guida per programmatori neon per ARMv8-A Fornisce ulteriori informazioni sulle funzioni intrinseche e sulla programmazione Neon in generale.
Crea
Disattiva Neon a livello globale
build-ndk
ndk-build non supporta la disattivazione di Neon a livello globale. Per disattivare Neon, ndk-build, applica i passaggi per modulo a ogni modulo nel tuo un'applicazione.
Marca
Supera -DANDROID_ARM_NEON=ON
quando richiami CMake. Se crei con Android
Studio/Gradle, imposta la seguente opzione nel file build.gradle:
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments "-DANDROID_ARM_NEON=OFF"
}
}
}
}
Disattiva Neon per modulo
build-ndk
Per creare tutti i file sorgente in un modulo ndk-build senza Neon, aggiungi seguente alla definizione del modulo nel file Android.mk:
LOCAL_ARM_NEON := false
Marca
Per creare tutti i file sorgente in una destinazione CMake senza Neon, aggiungi nel file CMakeLists.txt:
if(ANDROID_ABI STREQUAL armeabi-v7a)
set_target_properties(${TARGET} PROPERTIES COMPILE_FLAGS -mfpu=vfpv3-d16)
endif()
dove ${TARGET}
viene sostituito con il nome della tua raccolta.
Supporto multipiattaforma per x86
NDK supporta la compilazione multipiattaforma del tuo attuale ARM SIMD (Neon) funzioni interne nel codice SSE x86, attraverso l'uso NEON_2_SSE.h. Per ulteriori informazioni su questo argomento, vedi Da ARM NEON a Intel SSE: la soluzione di portabilità automatica, suggerimenti utili.
Codice di esempio
L'esempio di hello-neon
fornisce un esempio di come utilizzare la libreria cpufeatures
e le funzionalità intrinseche Neon
contemporaneamente. Questo esempio implementa un benchmark minuscolo per un loop di filtro FIR
con una versione C e una versione ottimizzata per Neon per i dispositivi che supportano Neon.