Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
El NDK admite Advanced SIMD de ARM, más conocida como Neon, una extensión opcional del conjunto de instrucciones para ARMv7 y ARMv8. NEON proporciona instrucciones escalares y vectoriales, así como registros (que se comparten con la FPU) similares a MMX/SSE/3DNow! en el entorno x86.
Todos los dispositivos Android basados en ARMv8 ("arm64") admiten Neon. Casi todos los dispositivos Android basados en ARMv7 ("32 bits") admiten Neon, incluidos todos los dispositivos que se lanzaron con el nivel de API 21 o versiones posteriores. El NDK habilita Neon de forma predeterminada para ambas ABI de Arm.
Si segmentas tu app para dispositivos muy antiguos, puedes filtrar los dispositivos no compatibles en Google Play Console. También puedes usar la consola de tu app para ver cuántos dispositivos se verían afectados.
Como alternativa, para lograr máxima compatibilidad, el código de 32 bits puede realizar la detección del tiempo de ejecución para confirmar que se puede ejecutar el código de Neon en el dispositivo de destino. Una app puede realizar esta verificación con cualquiera de las opciones mencionadas en Funciones de CPU.
No debes escribir funciones intrínsecas de Neon explícitas en tu código C/C++. Los tipos de vectores portátiles de Clang usarán automáticamente instrucciones de Neon. Las funciones intrínsecas de Neon de Clang son, en realidad, solo un wrapper no portátil alrededor de los tipos portátiles, por lo que escribir funciones intrínsecas de Neon no hará que tu código sea más rápido que usar los tipos portátiles, sino menos portátil.
Compilación
Cómo inhabilitar Neon a nivel global
ndk-build
ndk-build no permite inhabilitar Neon a nivel global. Para inhabilitar Neon en toda una aplicación ndk-build, implementa los pasos por módulo en cada módulo de tu aplicación.
CMake
Pasa -DANDROID_ARM_NEON=ON cuando invoques a CMake. Si compilas con Android Studio o Gradle, configura la siguiente opción en tu archivo build.gradle:
El ejemplo de vectorización muestra cómo usar diversas herramientas de vectorización para implementar una multiplicación de matrices y compara su rendimiento.
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2025-08-25 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 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."]]