Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Das NDK unterstützt ARM Advanced SIMD, allgemein als Neon bekannt, eine optionale Befehlssatzerweiterung für ARMv7 und ARMv8. Neon bietet Skalar-/Vektor-Befehle und Register (die mit der FPU geteilt werden), die mit MMX/SSE/3DNow! in der x86-Welt vergleichbar sind.
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 ausgeliefert wurden. Das NDK aktiviert Neon standardmäßig für beide Arm-ABIs.
Wenn Sie sehr alte Geräte als Zielgruppe haben, können Sie inkompatible Geräte in der Google Play Console herausfiltern. In der Console für Ihre App können Sie auch sehen, wie viele Geräte davon betroffen wären.
Alternativ kann 32-Bit-Code zur maximalen Kompatibilität eine Laufzeiterkennung durchführen, um zu bestätigen, dass Neon-Code auf dem Zielgerät ausgeführt werden kann. Eine App kann diese Prüfung mit einer der unter CPU-Funktionen genannten Optionen durchführen.
Sie sollten in Ihrem C/C++-Code keine expliziten Neon-Intrinsics schreiben. Bei den portablen Vektortypen von Clang werden automatisch Neon-Befehle verwendet. Die Neon-Intrinsics von Clang sind eigentlich nur ein nicht portabler Wrapper um die portablen Typen. Wenn Sie also Neon-Intrinsics schreiben, wird Ihr Code nicht schneller als bei Verwendung der portablen Typen, sondern nur weniger portabel.
Entwickeln
Neon global deaktivieren
ndk-build
Mit ndk-build kann Neon nicht global deaktiviert werden. Wenn Sie Neon für eine gesamte ndk-build-Anwendung deaktivieren möchten, wenden Sie die Schritte für jedes Modul auf alle Module in Ihrer Anwendung an.
CMake
Übergeben Sie -DANDROID_ARM_NEON=ON beim Aufrufen von CMake. Wenn Sie mit Android Studio/Gradle erstellen, legen Sie die folgende Option in Ihrer build.gradle-Datei fest:
Wenn Sie alle Quelldateien in einem ndk-build-Modul ohne Neon erstellen möchten, fügen Sie der Moduldefinition in Ihrer Android.mk-Datei Folgendes hinzu:
LOCAL_ARM_NEON:=false
CMake
Wenn Sie alle Quelldateien in einem CMake-Ziel ohne Neon erstellen möchten, fügen Sie Folgendes in Ihre CMakeLists.txt-Datei ein:
Im Vectorization Sample wird gezeigt, wie Sie verschiedene Vektorisierungstools verwenden, um eine Matrixmultiplikation zu implementieren, und es wird die Leistung der einzelnen Tools verglichen.
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-08-25 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-08-25 (UTC)."],[],[],null,["# Neon support\n\nThe NDK supports ARM Advanced SIMD, commonly known as Neon, an optional\ninstruction set extension for ARMv7 and ARMv8. Neon provides scalar/vector\ninstructions and registers (shared with the FPU) comparable to MMX/SSE/3DNow!\nin the x86 world.\n\nAll ARMv8-based (\"arm64\") Android devices support Neon. Almost all ARMv7-based\n(\"32-bit\") Android devices support Neon, including all devices that shipped with\nAPI level 21 or later. The NDK enables Neon by default for both Arm ABIs.\n\nIf you target very old devices, you can filter out incompatible devices on the\nGoogle Play Console. You can also use the console for your app to see how many\ndevices this would affect.\n\nAlternatively, for maximum compatibility, 32-bit code can perform runtime\ndetection to confirm that Neon code can be run on the target device. An app can\nperform this check using any of the options mentioned in\n[CPU features](/ndk/guides/cpu-features).\n\nYou should not write explicit Neon intrinsics in your C/C++ code. Clang's\n[portable vector types](https://clang.llvm.org/docs/LanguageExtensions.html#vectors-and-extended-vectors) will automatically use Neon instructions. Clang's Neon\nintrinsics are actually just a non-portable wrapper around the portable types,\nso writing Neon intrinsics will not make your code any faster than using the\nportable types, just less portable.\n\nBuild\n-----\n\n| **Note:** For NDK r21 and newer Neon is enabled by default for all API levels. If you need to disable Neon to support non-Neon devices (which are rare), invert the settings described below. Alternatively, the Play Store console can be used to [exclude CPUs](https://support.google.com/googleplay/android-developer/answer/7353455) that do not support Neon to prevent your application from being installed on those devices.\n\nDisable Neon globally\n---------------------\n\n### ndk-build\n\nndk-build does not support disabling Neon globally. To disable Neon an entire\nndk-build application, apply the per-module steps to every module in your\napplication.\n\n### CMake\n\nPass `-DANDROID_ARM_NEON=ON` when invoking CMake. If building with Android\nStudio/Gradle, set the following option in your build.gradle: \n\n android {\n defaultConfig {\n externalNativeBuild {\n cmake {\n arguments \"-DANDROID_ARM_NEON=OFF\"\n }\n }\n }\n }\n\nDisable Neon per module\n-----------------------\n\n### ndk-build\n\nTo build all the source files in an ndk-build module without Neon, add the\nfollowing to the module definition in your Android.mk: \n\n LOCAL_ARM_NEON := false\n\n### CMake\n\nTo build all the source files in a CMake target without Neon, add the\nfollowing to your CMakeLists.txt: \n\n if(ANDROID_ABI STREQUAL armeabi-v7a)\n set_target_properties(${TARGET} PROPERTIES COMPILE_FLAGS -mfpu=vfpv3-d16)\n endif()\n\nWhere `${TARGET}` is replaced with the name of your library.\n\nCross-platform support for x86\n------------------------------\n\n\nNDK supports cross-platform compilation of your existing ARM SIMD (Neon)\ninstrinsic functions into x86 SSE code, through the use of the third-party\n[NEON_2_SSE.h](https://github.com/intel/ARM_NEON_2_x86_SSE).\nFor more information on this topic, see\n[From ARM NEON to Intel SSE-the automatic porting solution, tips and tricks](http://software.intel.com/en-us/blogs/2012/12/12/from-arm-neon-to-intel-mmxsse-automatic-porting-solution-tips-and-tricks).\n\nSample code\n-----------\n\nThe [vectorization sample](https://github.com/android/ndk-samples/tree/main/vectorization) demonstrates how to use a variety of vectorization\ntools to implement a matrix multiply, and compares their performance."]]