Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
O NDK é compatível com o ARM Advanced SIMD, mais conhecido como Neon, uma extensão
de conjunto de instruções opcional para ARMv7 e ARMv8. O Neon oferece registros e instruções de escala/vetor (compartilhados com a FPU) comparáveis a MMX/SSE/3DNow! da arquitetura x86.
Todos os dispositivos Android baseados em ARMv8 ("arm64") são compatíveis com o Neon. Quase todos os dispositivos Android baseados em ARMv7 ("32 bits") são compatíveis com o Neon, incluindo todos os dispositivos com API de nível 21 ou mais recente. O NDK ativa o Neon por padrão para as duas ABIs do Arm.
Se você segmentar dispositivos muito antigos, filtre os incompatíveis no
Google Play Console. Você também pode usar o console do app para ver quantos
dispositivos isso afetaria.
Como alternativa, para compatibilidade máxima, o código de 32 bits pode realizar detecção no ambiente de execução para confirmar se o código NEON pode ser executado no dispositivo de destino. Um app pode
realizar essa verificação usando qualquer uma das opções mencionadas em
Recursos da CPU.
Não escreva intrínsecos explícitos do Neon no seu código C/C++. Os tipos de vetores portáteis do Clang usam automaticamente instruções Neon. Os intrínsecos do Neon do Clang são apenas um wrapper não portátil em torno dos tipos portáteis. Portanto, escrever intrínsecos do Neon não torna seu código mais rápido do que usar os tipos portáteis, apenas menos portátil.
Criar
Desativar o Neon globalmente
ndk-build
O ndk-build não é compatível com a desativação do Neon globalmente. Para desativar o Neon em todo o app ndk-build, aplique as etapas a cada módulo no app.
CMake
Transmita -DANDROID_ARM_NEON=ON ao invocar o CMake. Ao criar com o Android
Studio/Gradle, defina a seguinte opção no build.gradle:
O exemplo de vetorização demonstra como usar várias ferramentas de vetorização para implementar uma multiplicação de matrizes e compara o desempenho delas.
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-08-25 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 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."]]