Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
NDK hỗ trợ SIMD nâng cao của ARM (ARM Advanced SIMD) (thường gọi là Neon), một tiện ích tập lệnh không bắt buộc cho ARMv7 và ARMv8. Neon cung cấp các lệnh và thanh ghi vô hướng/vectơ (chia sẻ với FPU) tương đương với MMX/SSE/3DNow! trong kiến trúc x86.
Tất cả thiết bị Android dựa trên kiến trúc ARMv8 ("arm64") đều hỗ trợ Neon. Hầu hết các thiết bị Android dựa trên ARMv7 ("32 bit") đều hỗ trợ Neon, bao gồm tất cả các thiết bị đi kèm với API cấp 21 trở lên. Theo mặc định, NDK bật Neon cho cả hai ABI của Arm.
Nếu nhắm đến các thiết bị rất cũ, bạn có thể lọc ra các thiết bị không tương thích trên Google Play Console. Bạn cũng có thể sử dụng bảng điều khiển cho ứng dụng của mình để xem có bao nhiêu thiết bị sẽ bị ảnh hưởng.
Ngoài ra, để có khả năng tương thích tối đa, mã 32 bit có thể thực hiện việc phát hiện môi trường thời gian chạy để xác nhận rằng mã Neon có thể chạy được trên thiết bị mục tiêu. Ứng dụng có thể thực hiện quy trình kiểm tra này bằng cách sử dụng tuỳ chọn bất kỳ nêu trong nội dung Các tính năng của CPU.
Bạn không nên viết hàm nội tại Neon rõ ràng trong mã C/C++. Các loại vectơ di động của Clang sẽ tự động sử dụng các chỉ dẫn Neon. Các hàm nội tại Neon của Clang thực ra chỉ là một trình bao bọc không di động xung quanh các loại di động, vì vậy việc viết các hàm nội tại Neon sẽ không làm cho mã của bạn nhanh hơn so với việc sử dụng các loại di động, chỉ là ít di động hơn.
Tạo
Tắt Neon toàn cục
ndk-build
ndk-build không hỗ trợ chế độ tắt Neon toàn cục. Để tắt Neon cho một ứng dụng được xây dựng hoàn toàn bằng ndk-build, hãy áp dụng các bước theo mô-đun cho từng mô-đun trong ứng dụng của bạn.
CMake
Hãy truyền -DANDROID_ARM_NEON=ON khi gọi CMake. Nếu bạn tạo bản dựng bằng Android Studio/Gradle, hãy thiết lập những tuỳ chọn sau đây trong build.gradle:
Mẫu vectơ hoá minh hoạ cách sử dụng nhiều công cụ vectơ hoá để triển khai phép nhân ma trận và so sánh hiệu suất của các công cụ đó.
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-08-25 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 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."]]