NDK תומך ב-ARM Advanced SIMD, שנקרא גם 'נאון', ל-ARMv7 ול-ARMv8. ניאון מספק סקלר/וקטור הוראות ורישומים (בשיתוף עם ה-FPU) הדומות ל-MMX/SSE/3DNow! בעולם x86.
כל מכשירי Android מבוססי ARMv8 ("arm64") תומכים ב-Neon. כמעט כל האפליקציות מבוססות ARMv7 מכשירי Android ("32 סיביות") תומכים ב-Neon, כולל כל המכשירים שנשלחו עם רמת API 21 ואילך. NDK מפעיל את ניאון כברירת מחדל בשניהם.
אם אתם מטרגטים מכשירים ישנים מאוד, תוכלו לסנן מכשירים לא תואמים Google Play Console. אפשר גם להשתמש במסוף של האפליקציה כדי לראות כמה זה ישפיע על המכשירים.
לחלופין, לקבלת תאימות מקסימלית, קוד של 32 ביט יכול לבצע זמן ריצה כדי לאשר שקוד ניאון יכול לפעול במכשיר היעד. אפליקציה יכולה צריך לבצע את הבדיקה באמצעות כל אחת מהאפשרויות תכונות מעבד (CPU).
אפשר להשתמש מאפייני ניאון בקוד C ו-C++ כדי לנצל את תוסף ה-SIMD המתקדם. מדריך למתכנת ניאון עבור Armv8-A מספק מידע נוסף על אינטנסיביות של ניאון ועל תכנות ניאון באופן כללי.
Build
השבתה של ניאון בכל העולם
ndk-build
ndk-build לא תומך בהשבתה של ניאון באופן גלובלי. כדי להשבית את ניאון בשלמותו ndk-build האפליקציה, מחילה את השלבים של כל מודול על כל מודול תרגום מכונה.
CMake
כשמפעילים את CMake, צריך לעבור -DANDROID_ARM_NEON=ON
. אם משתמשים ב-Android
ב-build.gradle, מגדירים את האפשרות הבאה ב-Studio/Gradle:
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments "-DANDROID_ARM_NEON=OFF"
}
}
}
}
השבתת ניאון בכל מודול
ndk-build
כדי לבנות את כל קובצי המקור במודול ndk-build בלי ניאון, מוסיפים את הקוד בהתאם להגדרת המודול ב-Android.mk:
LOCAL_ARM_NEON := false
CMake
כדי ליצור את כל קובצי המקור ביעד CMaket ללא ניאון, צריך להוסיף את הקוד הבאים ל-CMakeLists.txt:
if(ANDROID_ABI STREQUAL armeabi-v7a)
set_target_properties(${TARGET} PROPERTIES COMPILE_FLAGS -mfpu=vfpv3-d16)
endif()
כאשר ${TARGET}
מוחלף בשם הספרייה.
תמיכה בפלטפורמות שונות ל-x86
NDK תומך בהידור בפלטפורמות שונות של ה-ARM SIMD (Neon) הקיים פונקציות פנימיות בקוד x86 SSE, באמצעות שימוש בצד השלישי NEON_2_SSE.h. למידע נוסף בנושא זה: מ-ARM NEON ועד Intel SSE – פתרון הניוד האוטומטי, טיפים וטריקים.
קוד לדוגמה
דוגמת הלו-נאון
מובאת דוגמה לאופן השימוש בספרייה cpufeatures
ובערכי ניאון
בו-זמנית. הדוגמה הזו מטמיעה נקודת השוואה קטנה ללולאת מסנן FIR
עם גרסת C וגרסה מותאמת לנאון (Neon) למכשירים שתומכים בנאון.