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.