Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
L'NDK supporta ARM Advanced SIMD, comunemente noto come Neon, un'estensione
del set di istruzioni facoltativa per ARMv7 e ARMv8. Neon fornisce istruzioni e registri scalari/vettoriali (condivisi con la FPU) paragonabili a MMX/SSE/3DNow! nel mondo x86.
Tutti i dispositivi Android basati su ARMv8 ("arm64") supportano Neon. Quasi tutti i dispositivi Android basati su ARMv7 ("32 bit") supportano Neon, inclusi tutti i dispositivi forniti con il livello API 21 o versioni successive. L'NDK abilita Neon per impostazione predefinita per entrambe le ABI Arm.
Se scegli come target dispositivi molto vecchi, puoi filtrare i dispositivi incompatibili su
Google Play Console. Puoi anche utilizzare la console per la tua app per vedere quanti
dispositivi sarebbero interessati.
In alternativa, per la massima compatibilità, il codice a 32 bit può eseguire il rilevamento
in fase di runtime per verificare che il codice Neon possa essere eseguito sul dispositivo di destinazione. Un'app può
eseguire questo controllo utilizzando una delle opzioni menzionate in
Funzionalità della CPU.
Non devi scrivere intrinseci Neon espliciti nel tuo codice C/C++. I tipi di vettori portabili di Clang utilizzeranno automaticamente le istruzioni Neon. Gli intrinseci Neon di Clang
sono in realtà solo un wrapper non portabile intorno ai tipi portabili,
quindi scrivere intrinseci Neon non renderà il tuo codice più veloce dell'utilizzo dei
tipi portabili, ma solo meno portabile.
Crea
Disattivare Neon a livello globale
ndk-build
ndk-build non supporta la disattivazione globale di Neon. Per disattivare Neon per un'intera applicazione ndk-build, applica i passaggi per modulo a ogni modulo dell'applicazione.
CMake
Passa -DANDROID_ARM_NEON=ON quando richiami CMake. Se esegui la compilazione con Android
Studio/Gradle, imposta la seguente opzione in build.gradle:
L'esempio di vettorizzazione mostra come utilizzare una serie di strumenti di vettorizzazione
per implementare una moltiplicazione di matrici e confronta il loro rendimento.
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-08-25 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 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."]]