Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Le NDK est compatible avec ARM Advanced SIMD, communément appelé Neon, une extension facultative contenant un ensemble d'instructions pour ARMv7 et ARMv8. Neon fournit des instructions et des registres scalaires/vectoriels (partagés avec le FPU) comparables à MMX/SSE/3DNow! dans un environnement x86.
Tous les appareils Android basés sur ARMv8 ("arm64") sont compatibles avec Neon. Presque tous les appareils Android basés sur ARMv7 ("32 bits") sont compatibles avec Neon, y compris l'ensemble des appareils livrés avec le niveau d'API 21 ou supérieur. Le NDK active Neon par défaut pour les deux ABI Arm.
Si vous ciblez des appareils très anciens, vous pouvez filtrer les appareils incompatibles dans la Google Play Console. Vous pouvez également utiliser la console pour votre application afin de voir le nombre d'appareils concernés.
Pour assurer une compatibilité maximale, le code 32 bits peut procéder à la détection de l'environnement d'exécution afin de vérifier que le code Neon peut être exécuté sur l'appareil cible. Une application peut effectuer cette vérification à l'aide de l'une des options mentionnées dans Fonctionnalités du processeur.
Vous ne devez pas écrire de fonctionnalités intrinsèques Neon explicites dans votre code C/C++. Les types de vecteurs portables de Clang utiliseront automatiquement les instructions Neon. Les intrinsèques Neon de Clang ne sont en fait qu'un wrapper non portable autour des types portables. Par conséquent, l'écriture d'intrinsèques Neon ne rendra pas votre code plus rapide que l'utilisation des types portables, mais le rendra moins portable.
Créer
Désactiver Neon de manière globale
ndk-build
ndk-build ne permet pas de désactiver Neon de manière globale. Pour désactiver Neon sur l'ensemble d'une application ndk-build, appliquez la procédure "Désactiver Neon pour un module" à chaque module de l'application.
CMake
Transmettez -DANDROID_ARM_NEON=ON lors de l'appel de CMake. Si vous compilez votre application à l'aide d'Android Studio/Gradle, définissez l'option suivante dans votre fichier build.gradle :
L'exemple de vectorisation montre comment utiliser différents outils de vectorisation pour implémenter une multiplication matricielle et compare leurs performances.
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/08/25 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 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."]]