مساعدة نيون

يتوافق NDK مع ARM Advanced SIMD، المعروف باسم Neon، وهو إضافة اختيارية لمجموعة التعليمات الخاصة بمعالجات ARMv7 وARMv8. توفّر Neon تعليمات ومسجّلات عددية/متجهة (مشتركة مع وحدة الفاصلة العائمة) مماثلة لـ MMX/SSE/3DNow! في عالم x86.

تتوافق جميع أجهزة Android المستندة إلى ARMv8 ("arm64") مع Neon. تتوافق جميع أجهزة Android المستندة إلى ARMv7 ("32 بت") تقريبًا مع Neon، بما في ذلك جميع الأجهزة التي تم شحنها مع المستوى 21 من واجهة برمجة التطبيقات أو مستوى أحدث. يتيح NDK استخدام Neon تلقائيًا لكلا واجهتَي التطبيق الثنائية (ABI) المستندتَين إلى Arm.

إذا كنت تستهدف أجهزة قديمة جدًا، يمكنك فلترة الأجهزة غير المتوافقة على Google Play Console. يمكنك أيضًا استخدام وحدة التحكّم الخاصة بتطبيقك لمعرفة عدد الأجهزة التي سيتأثر بها هذا التغيير.

بدلاً من ذلك، ولضمان التوافق إلى أقصى حد، يمكن أن ينفّذ الرمز البرمجي ذو 32 بت عملية رصد وقت التشغيل للتأكّد من إمكانية تشغيل رمز Neon على الجهاز المستهدف. يمكن لأي تطبيق إجراء هذا التحقّق باستخدام أي من الخيارات المذكورة في ميزات وحدة المعالجة المركزية.

يجب عدم كتابة وظائف Neon المضمّنة الصريحة في رمز C/C++. ستستخدم أنواع المتجهات المحمولة في Clang تعليمات Neon تلقائيًا. إنّ وظائف Clang المضمّنة في Neon هي في الواقع مجرد برنامج تضمين غير قابل للنقل حول الأنواع القابلة للنقل، لذا فإنّ كتابة وظائف Neon المضمّنة لن تجعل الرمز البرمجي أسرع من استخدام الأنواع القابلة للنقل، بل ستجعله أقل قابلية للنقل.

إنشاء

إيقاف Neon على مستوى العالم

ndk-build

لا يتيح ndk-build إيقاف Neon على مستوى العالم. لإيقاف Neon في تطبيق ndk-build بالكامل، طبِّق الخطوات الخاصة بكل وحدة على كل وحدة في تطبيقك.

CMake

مرِّر -DANDROID_ARM_NEON=ON عند استدعاء CMake. إذا كنت تستخدم Android Studio/Gradle في عملية الإنشاء، اضبط الخيار التالي في ملف build.gradle:

android {
    defaultConfig {
        externalNativeBuild {
            cmake {
                arguments "-DANDROID_ARM_NEON=OFF"
            }
        }
    }
}

إيقاف Neon لكل وحدة

ndk-build

لإنشاء جميع ملفات المصدر في وحدة ndk-build بدون Neon، أضِف ما يلي إلى تعريف الوحدة في ملف Android.mk:

LOCAL_ARM_NEON := false

CMake

لإنشاء جميع ملفات المصدر في هدف CMake بدون Neon، أضِف ما يلي إلى ملف 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 التابع لجهة خارجية. لمزيد من المعلومات حول هذا الموضوع، راجِع From ARM NEON to Intel SSE-the automatic porting solution, tips and tricks.

نموذج التعليمات البرمجية

يوضّح نموذج تحويل البيانات إلى متجهات كيفية استخدام مجموعة متنوعة من أدوات تحويل البيانات إلى متجهات لتنفيذ عملية ضرب المصفوفات، ويقارن بين أدائها.