תמיכה בנאון

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) למכשירים שתומכים בנאון.