नियॉन सहायता

एनडीके, ARM Advanced SIMD के साथ काम करता है. इसे आम तौर पर Neon कहा जाता है. यह ARMv7 और ARMv8 के लिए, निर्देश सेट एक्सटेंशन है. हालांकि, इसका इस्तेमाल करना ज़रूरी नहीं है. Neon, x86 दुनिया में MMX/SSE/3DNow! की तरह, स्केलर/वेक्टर निर्देश और रजिस्टर (FPU के साथ शेयर किए जाते हैं) उपलब्ध कराता है.

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 पर ऑटोमैटिक पोर्टिंग का समाधान, सलाह, और तरकीबें लेख पढ़ें.

सैंपल कोड

वेक्टराइज़ेशन के सैंपल में बताया गया है कि मैट्रिक्स को गुणा करने के लिए, अलग-अलग वेक्टराइज़ेशन टूल का इस्तेमाल कैसे किया जाता है. साथ ही, इनकी परफ़ॉर्मेंस की तुलना की गई है.