Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
NDK mendukung ARM Advanced SIMD, yang umumnya disebut Neon, yakni ekstensi
kumpulan petunjuk opsional untuk ARMv7 dan ARMv8. Neon menyediakan petunjuk dan register
skalar/vektor (digunakan bersama FPU) yang setara dengan MMX/SSE/3DNow!
pada platform x86.
Semua perangkat Android berbasis ARMv8 ("arm64") mendukung Neon. Hampir semua perangkat Android berbasis ARMv7
("32-bit") mendukung Neon, termasuk semua perangkat yang dikirimkan dengan
level API 21 atau yang lebih baru. NDK mengaktifkan Neon secara default untuk kedua ABI Arm.
Jika menargetkan perangkat yang sangat lama, Anda dapat memfilter perangkat yang tidak kompatibel di
Konsol Google Play. Anda juga dapat menggunakan konsol untuk aplikasi Anda guna melihat jumlah perangkat yang akan terpengaruh.
Atau, untuk mendapatkan kompatibilitas maksimum, kode 32 bit dapat melakukan deteksi
waktu proses untuk memastikan bahwa kode Neon dapat dijalankan di perangkat target. Aplikasi dapat
menjalankan pemeriksaan ini menggunakan salah satu opsi yang disebutkan dalam
fitur CPU.
Anda tidak boleh menulis intrinsik Neon eksplisit dalam kode C/C++ Anda. Jenis vektor portabel Clang akan otomatis menggunakan instruksi Neon. Intrinsik Neon Clang sebenarnya hanyalah wrapper yang tidak portabel di sekitar jenis portabel, sehingga menulis intrinsik Neon tidak akan membuat kode Anda lebih cepat daripada menggunakan jenis portabel, hanya kurang portabel.
Build
Menonaktifkan Neon secara global
ndk-build
ndk-build tidak mendukung penonaktifan Neon secara global. Jika ingin menonaktifkan Neon untuk aplikasi ndk-build secara keseluruhan, terapkan langkah-langkah per modul ke setiap modul dalam aplikasi Anda.
CMake
Teruskan -DANDROID_ARM_NEON=ON saat memanggil CMake. Jika mem-build dengan Android
Studio/Gradle, tetapkan opsi berikut dalam build.gradle:
Contoh vektorisasi menunjukkan cara menggunakan berbagai alat vektorisasi untuk menerapkan perkalian matriks, dan membandingkan performanya.
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-08-25 UTC.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Informasi yang saya butuhkan tidak ada","missingTheInformationINeed","thumb-down"],["Terlalu rumit/langkahnya terlalu banyak","tooComplicatedTooManySteps","thumb-down"],["Sudah usang","outOfDate","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Masalah kode / contoh","samplesCodeIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 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."]]