קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
NDK תומך ב-ARM Advanced SIMD, שנקרא בדרך כלל Neon, שהוא הרחבה אופציונלית של קבוצת פקודות ל-ARMv7 ול-ARMv8. Neon מספקת הוראות סקלריות/וקטוריות ורגיסטרים (משותפים עם FPU) שדומים ל-MMX/SSE/3DNow! בעולם x86.
כל מכשירי Android מבוססי ARMv8 (arm64) תומכים ב-Neon. כמעט כל מכשירי Android שמבוססים על ARMv7 (מכשירי 32 ביט) תומכים ב-Neon, כולל כל המכשירים שנשלחו עם API ברמה 21 ומעלה. NDK מפעיל את Neon כברירת מחדל עבור שני ממשקי ה-ABI של Arm.
אם אתם מטargetים מכשירים ישנים מאוד, אתם יכולים לסנן מכשירים לא תואמים ב-Google Play Console. אפשר גם להשתמש במסוף של האפליקציה כדי לראות על כמה מכשירים זה ישפיע.
לחלופין, כדי להשיג תאימות מקסימלית, קוד 32 ביט יכול לבצע זיהוי בזמן ריצה כדי לוודא שאפשר להריץ קוד Neon במכשיר היעד. אפליקציה יכולה לבצע את הבדיקה הזו באמצעות אחת מהאפשרויות שמוזכרות בקטע תכונות של CPU.
לא מומלץ לכתוב פונקציות Neon intrinsics מפורשות בקוד C/C++. portable vector types של Clang ישתמשו אוטומטית בהוראות Neon. הפונקציות הפנימיות של Neon ב-Clang הן למעשה רק wrapper לא נייד סביב הסוגים הניידים, כך שכתיבת פונקציות פנימיות של Neon לא תגרום לקוד לפעול מהר יותר מאשר שימוש בסוגים הניידים, אלא רק יהפוך אותו לנייד פחות.
תכנות
השבתה של Neon בכל העולם
ndk-build
ndk-build לא תומך בהשבתה של Neon באופן גלובלי. כדי להשבית את Neon באפליקציית NDK-build שלמה, צריך להחיל את השלבים לכל מודול על כל מודול באפליקציה.
CMake
מעבירים את -DANDROID_ARM_NEON=ON כשמפעילים את CMake. אם מבצעים build באמצעות Android Studio או Gradle, צריך להגדיר את האפשרות הבאה בקובץ build.gradle:
הדוגמה לוקטוריזציה מדגימה איך להשתמש במגוון כלים לוקטוריזציה כדי להטמיע כפל מטריצות, ומשווה את הביצועים שלהם.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-08-25 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 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."]]