يتوافق بروتوكول NDK مع تقنية ARM المتقدمة التي تستخدم شريحة SIMD، وتُعرف عادةً باسم Neon، وهي إضافة اختيارية لإعداد التعليمات الخاصة بـ ARMv7 وARMv8. يوفّر Neon تعليمات معيارية أو متّجهة وسجلّ (تتم مشاركته مع FPU) مشابهًا لمعيار MMX/SSE/3DNow. في عالم x86.
تتوافق جميع أجهزة Android المستندة إلى ARMv7 تقريبًا مع ميزة Neon، بما في ذلك جميع الأجهزة التي تم شحنها باستخدام المستوى 21 من واجهة برمجة التطبيقات أو مستوى أحدث. تؤدي اتفاقية NDK إلى تفعيل ميزة Neon بشكل تلقائي.
تتوافق جميع أجهزة Android المستنِدة إلى ARMv8 مع Neon.
يتوافق بروتوكول NDK مع مجموعة الوحدات أو حتى ملفات مصدر معيّنة مع إتاحة استخدام Neon. يمكنك استخدام المؤشرات الأساسية في رمز C وC++ للاستفادة من إضافة SIM SIM المتقدّمة. يوفّر دليل برمجة النيون لـ Armv8-A مزيدًا من المعلومات حول أصول النيون وبرمجة النيون بشكلٍ عام.
إنشاء
تفعيل ميزة Neon على مستوى العالم
إنشاء إصدارات جديدة
لا يتيح ndk-build تفعيل Neon في جميع أنحاء العالم. لتفعيل تطبيق Neon تطبيق كامل النطاق بفضل نظام ndk، عليك تطبيق الخطوات لكل وحدة على كل وحدة في تطبيقك.
صناعة
تمرير -DANDROID_ARM_NEON=ON
عند استدعاء CMake. في حال إنشاء مبنى باستخدام "استوديو Android" أو Google Gradle، حدِّد الخيار التالي في version.gradle:
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments "-DANDROID_ARM_NEON=ON"
}
}
}
}
تفعيل ميزة النيون لكل وحدة
إنشاء إصدارات جديدة
لإنشاء جميع الملفات المصدر في وحدة تصميم ndk باستخدام NEON، أضِف ما يلي إلى تعريف الوحدة في Android.mk:
LOCAL_ARM_NEON := true
صناعة
لإنشاء جميع الملفات المصدر في هدف CMake باستخدام NEON، أضِف ما يلي إلى CMakeLists.txt:
if(ANDROID_ABI STREQUAL armeabi-v7a)
set_target_properties(${TARGET} PROPERTIES COMPILE_FLAGS -mfpu=neon)
endif()
عندما يتم استبدال ${TARGET}
باسم مكتبتك.
وقد يكون من المفيد على وجه الخصوص إنشاء جميع الملفات المصدر بدعم Neon إذا كنت تريد إنشاء مكتبة ثابتة أو مشتركة تحتوي على رمز Neon فقط.
تفعيل ميزة Neon لكل ملف مصدر
إنشاء إصدارات جديدة
عند إدراج ملفات المصدر للمتغيّر LOCAL_SRC_FILES
، يتوفّر لك خيار استخدام لاحقة .neon
للإشارة إلى أنك تريد إنشاء ملفات فردية باستخدام ميزة Neon. على سبيل المثال، تنشئ الصورة التالية
ملفًا واحدًا (foo.c
) مع دعم Neon وملف آخر (bar.c
) بدون:
LOCAL_SRC_FILES := foo.c.neon bar.c
يمكنك دمج لاحقة .neon
مع لاحقة .arm
، التي تحدّد مجموعة تعليمات ARM بمعدّل 32 بت (بدلاً من لاحقة Thumb2) للحصول على تعليمات غير نيون.
وفي هذه الحالة، يجب أن يأتي .arm
قبل .neon
. على سبيل المثال: foo.c.arm.neon
يعمل مع foo.c.neon.arm
.
صناعة
لإنشاء ملف مصدر معيّن باستخدام Neon، أضِف ما يلي إلى ملف CMakeLists.txt:
if(ANDROID_ABI STREQUAL armeabi-v7a)
set_source_files_properties(foo.cpp PROPERTIES COMPILE_FLAGS -mfpu=neon)
endif()
رصد وقت التشغيل
تتوافق أجهزة Android مع Neon، بما في ذلك جميع الأجهزة التي تم شحنها باستخدام المستوى 21 من واجهة برمجة التطبيقات أو مستويات أحدث. تؤدي اتفاقية NDK إلى تفعيل ميزة Neon بشكل تلقائي. لتحقيق أقصى قدر من التوافق، يمكن لرمز 32 بت إجراء اكتشاف وقت التشغيل لتأكيد إمكانية تشغيل رمز Neon على الجهاز المستهدَف. يمكن للتطبيق إجراء هذا الفحص باستخدام أي من الخيارات المذكورة في ميزات وحدة المعالجة المركزية (CPU).
بدلاً من ذلك، يمكن فلترة الأجهزة غير المتوافقة على Google Play Console. يمكنك أيضًا استخدام وحدة التحكم لمعرفة عدد الأجهزة التي سيؤثر فيها هذا.
إتاحة إمكانية استخدام عدّة منصات في x86
تتيح منصّة NDK إمكانية التجميع من عدّة منصات لوظائف ARM SIMD (النيون) الحالية في رمز x86 SSE، وذلك من خلال استخدام الجهات الخارجية NEON_2_SSE.h. للحصول على مزيد من المعلومات حول هذا الموضوع، يُرجى الاطّلاع على من ARM NEON إلى Intel SSE-حل النقل التلقائي والنصائح.
نموذج التعليمات البرمجية
توفّر عينة النيون
مثالاً على كيفية استخدام مكتبة cpufeatures
وقيم النيون
في الوقت نفسه. يقدّم هذا النموذج مقاييس أداء صغيرة لتكرار فلتر FIR
باستخدام إصدار C والإصدار المحسَّن من النيون للأجهزة التي تتوافق مع Neon.