Neon-Unterstützung

Das NDK unterstützt ARM Advanced SIMD, allgemein bekannt als Neon, eine optionale Erweiterung des Befehlssatzes für ARMv7 und ARMv8. Neon liefert Skalar/Vektor Anweisungen und Registrierungen (an die FPU weitergegeben), vergleichbar mit MMX/SSE/3DNow! in der x86-Welt.

Alle ARMv8-basierten („arm64“) Android-Geräte unterstützen Neon. Fast alle ARMv7-basierten 32-Bit-Android-Geräte unterstützen Neon, einschließlich aller Geräte, die mit API-Level 21 oder höher. Das NDK aktiviert standardmäßig Neon für beide.

Bei der Ausrichtung auf sehr alte Geräte können Sie inkompatible Geräte auf der Google Play Console Sie können auch in der Konsole für Ihre App sehen, wie viele die davon betroffen sind.

Für maximale Kompatibilität kann 32-Bit-Code alternativ eine Laufzeit ausführen. Erkennung, um zu bestätigen, dass Neoncode auf dem Zielgerät ausgeführt werden kann. Eine App kann Führen Sie diese Prüfung mit einer der Optionen aus, CPU-Features:

Sie können Neon-Intrinsik in C und C++ Code, um die Vorteile der erweiterten SIMD-Erweiterung zu nutzen. Die Neon-Programmiererhandbuch für Armv8-A finden Sie weitere Informationen zur Neon-Intrinsik und zur Neon-Programmierung im Allgemeinen.

Eine Community

Neon global deaktivieren

NK-Build

ndk-build unterstützt die globale Deaktivierung von Neon nicht. Um Neon vollständig zu deaktivieren, ndk-build-Anwendung die Schritte pro Modul auf jedes Modul in Ihrem .

CMake

Übergeben Sie beim Aufrufen von CMake -DANDROID_ARM_NEON=ON. Bei der Entwicklung mit Android Studio/Gradle. Legen Sie dazu in der build.gradle-Datei die folgende Option fest:

android {
    defaultConfig {
        externalNativeBuild {
            cmake {
                arguments "-DANDROID_ARM_NEON=OFF"
            }
        }
    }
}

Neon pro Modul deaktivieren

NK-Build

Um alle Quelldateien in einem ndk-build-Modul ohne Neon zu erstellen, fügen Sie den der Moduldefinition in Ihrer Android.mk-Datei an:

LOCAL_ARM_NEON := false

CMake

Um alle Quelldateien in einem CMake-Ziel ohne Neon zu erstellen, fügen Sie den Folgendes zu Ihrer CMakeLists.txt-Datei hinzufügen:

if(ANDROID_ABI STREQUAL armeabi-v7a)
    set_target_properties(${TARGET} PROPERTIES COMPILE_FLAGS -mfpu=vfpv3-d16)
endif()

Dabei wird ${TARGET} durch den Namen Ihrer Bibliothek ersetzt.

Plattformübergreifende Unterstützung für x86

NDK unterstützt die plattformübergreifende Kompilierung Ihres vorhandenen ARM SIMD (Neon) in x86-SSE-Code konvertiert werden, NEON_2_SSE.h verwendet. Weitere Informationen zu diesem Thema finden Sie unter Von ARM NEON bis Intel SSE – der Lösung zur automatischen Portierung sowie Tipps und Tricks

Beispielcode

hello-neon-Beispiel finden Sie ein Beispiel für die Verwendung der cpufeatures-Bibliothek und der Neon-Eigenschaften aus. In diesem Beispiel wird eine winzige Benchmark für eine FIR-Filterschleife implementiert. mit einer C-Version und einer Neon-optimierten Version für Geräte, die Neon unterstützen.