एनडीके, एआरएम एडवांस्ड सिमड (इसे आम तौर पर Neon कहा जाता है) के साथ काम करता है. यह एआरएमवी7 और एआरएमवी8 के लिए, निर्देश सेट एक्सटेंशन का एक वैकल्पिक सेट है. Neon, स्केलर/वेक्टर निर्देश और रजिस्टर (FPU के साथ शेयर किए जाते हैं) उपलब्ध कराता है. ये x86 दुनिया में MMX/SSE/3DNow! के बराबर होते हैं.
ARMv8 ("arm64") पर आधारित सभी Android डिवाइसों पर Neon काम करता है. ARMv7 पर आधारित ("32-बिट") लगभग सभी Android डिवाइसों पर Neon काम करता है. इनमें वे सभी डिवाइस शामिल हैं जिनमें एपीआई लेवल 21 या उसके बाद का वर्शन है. एनडीके, दोनों आर्म एबीआइ के लिए डिफ़ॉल्ट रूप से Neon को चालू करता है.
अगर आपको बहुत पुराने डिवाइसों को टारगेट करना है, तो Google Play Console पर जाकर, उन डिवाइसों को फ़िल्टर किया जा सकता है जिन पर आपका ऐप्लिकेशन काम नहीं करता. अपने ऐप्लिकेशन के लिए कंसोल का इस्तेमाल करके यह भी देखा जा सकता है कि इससे कितने डिवाइसों पर असर पड़ेगा.
इसके अलावा, ज़्यादा से ज़्यादा डिवाइसों के साथ काम करने के लिए, 32-बिट कोड रनटाइम का पता लगा सकता है. इससे यह पुष्टि की जा सकती है कि टारगेट डिवाइस पर Neon कोड चलाया जा सकता है. कोई ऐप्लिकेशन, सीपीयू की सुविधाओं में बताए गए किसी भी विकल्प का इस्तेमाल करके, इस जांच को पूरा कर सकता है.
आपको अपने C/C++ कोड में, Neon इंट्रिंसिक को साफ़ तौर पर नहीं लिखना चाहिए. Clang के पोर्टेबल वेक्टर टाइप, Neon निर्देशों का इस्तेमाल अपने-आप करेंगे. Clang के Neon इंट्रिंसिक, पोर्टेबल टाइप के चारों ओर एक नॉन-पोर्टेबल रैपर होते हैं. इसलिए, Neon इंट्रिंसिक लिखने से आपका कोड, पोर्टेबल टाइप का इस्तेमाल करने की तुलना में ज़्यादा तेज़ नहीं होगा. हालांकि, यह कम पोर्टेबल होगा.
बनाएं
Neon को ग्लोबल लेवल पर बंद करना
ndk-build
ndk-build, Neon को पूरी तरह से बंद करने की सुविधा के साथ काम नहीं करता. पूरे ndk-build ऐप्लिकेशन के लिए Neon को बंद करने के लिए, अपने ऐप्लिकेशन के हर मॉड्यूल पर मॉड्यूल के हिसाब से दिए गए चरणों को लागू करें.
CMake
CMake को शुरू करते समय -DANDROID_ARM_NEON=ON
पास करें. अगर Android Studio/Gradle का इस्तेमाल करके बनाया जा रहा है, तो build.gradle में यह विकल्प सेट करें:
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments "-DANDROID_ARM_NEON=OFF"
}
}
}
}
हर मॉड्यूल के लिए Neon की सुविधा बंद करना
ndk-build
अगर आपको Neon के बिना ndk-build मॉड्यूल में सभी सोर्स फ़ाइलें बनानी हैं, तो अपने Android.mk में मॉड्यूल की परिभाषा में यह जोड़ें:
LOCAL_ARM_NEON := false
CMake
अगर आपको Neon के बिना, 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 पर ऑटोमैटिक पोर्टिंग का समाधान, सुझाव, और तरकीबें लेख पढ़ें.
नमूना कोड
वेक्टराइज़ेशन के सैंपल में बताया गया है कि मैट्रिक्स को गुणा करने के लिए, अलग-अलग वेक्टराइज़ेशन टूल का इस्तेमाल कैसे किया जाता है. साथ ही, इनकी परफ़ॉर्मेंस की तुलना की गई है.