Assistenza al neon

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.