NDK از ARM Advanced SIMD، که معمولاً به عنوان Neon شناخته می شود، یک پسوند مجموعه دستورالعمل اختیاری برای ARMv7 و ARMv8 پشتیبانی می کند. نئون دستورالعملها و رجیسترهای اسکالر/بردار (به اشتراک گذاشته شده با FPU) قابل مقایسه با MMX/SSE/3DNow را ارائه میکند! در دنیای x86
همه دستگاه های اندروید مبتنی بر ARMv8 ("arm64") از نئون پشتیبانی می کنند. تقریباً تمام دستگاههای اندرویدی مبتنی بر ARMv7 («32 بیتی») از نئون پشتیبانی میکنند، از جمله همه دستگاههایی که با سطح API 21 یا بالاتر عرضه شدهاند. NDK به طور پیش فرض نئون را برای هر دو فعال می کند.
اگر دستگاههای بسیار قدیمی را هدف قرار میدهید، میتوانید دستگاههای ناسازگار را در کنسول Google Play فیلتر کنید. همچنین می توانید از کنسول برای برنامه خود استفاده کنید تا ببینید این روی چند دستگاه تأثیر می گذارد.
متناوبا، برای حداکثر سازگاری، کد 32 بیتی می تواند تشخیص زمان اجرا را انجام دهد تا تأیید کند که کد نئون می تواند بر روی دستگاه مورد نظر اجرا شود. یک برنامه می تواند این بررسی را با استفاده از هر یک از گزینه های ذکر شده در ویژگی های CPU انجام دهد.
برای استفاده از پسوند Advanced SIMD می توانید از درونیات نئون در کدهای C و C++ استفاده کنید. راهنمای برنامه نویس نئون برای Armv8-A اطلاعات بیشتری در مورد ذاتی نئون و برنامه نویسی نئون به طور کلی ارائه می دهد.
ساخت
نئون را در سطح جهانی غیرفعال کنید
ndk-build
ndk-build از غیرفعال کردن نئون در سطح جهانی پشتیبانی نمیکند. برای غیرفعال کردن Neon کل برنامه ndk-build، مراحل هر ماژول را برای هر ماژول در برنامه خود اعمال کنید.
CMake
هنگام فراخوانی CMake -DANDROID_ARM_NEON=ON
را پاس کنید. در صورت ساخت با Android Studio/Gradle، گزینه زیر را در build.gradle خود تنظیم کنید:
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments "-DANDROID_ARM_NEON=OFF"
}
}
}
}
Neon را در هر ماژول غیرفعال کنید
ndk-build
برای ساخت تمام فایلهای منبع در یک ماژول ndk-build بدون نئون، موارد زیر را به تعریف ماژول در Android.mk خود اضافه کنید:
LOCAL_ARM_NEON := false
CMake
برای ساختن همه فایلهای منبع در یک هدف CMake بدون نئون، موارد زیر را به 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 - راه حل انتقال خودکار، نکات و ترفندها را ببینید.
کد نمونه
نمونه hello-neon مثالی از نحوه استفاده همزمان از کتابخانه cpufeatures
و Neon intrinsics ارائه می دهد. این نمونه یک معیار کوچک برای یک حلقه فیلتر FIR با نسخه C و یک نسخه بهینه شده نئون برای دستگاه هایی که از نئون پشتیبانی می کنند، پیاده سازی می کند.