নিয়ন সমর্থন

NDK ARM Advanced SIMD সমর্থন করে, যা সাধারণত নিয়ন নামে পরিচিত, ARMv7 এবং ARMv8 এর জন্য একটি ঐচ্ছিক নির্দেশ সেট এক্সটেনশন। নিয়ন স্কেলার/ভেক্টর নির্দেশাবলী এবং রেজিস্টার প্রদান করে (FPU এর সাথে ভাগ করা) MMX/SSE/3DNow এর সাথে তুলনীয়! x86 বিশ্বে।

সমস্ত ARMv8-ভিত্তিক ("arm64") অ্যান্ড্রয়েড ডিভাইস নিয়ন সমর্থন করে। প্রায় সমস্ত ARMv7-ভিত্তিক ("32-বিট") অ্যান্ড্রয়েড ডিভাইস নিয়নকে সমর্থন করে, এপিআই লেভেল 21 বা তার পরে পাঠানো সমস্ত ডিভাইস সহ। NDK উভয়ের জন্য ডিফল্টরূপে নিয়ন সক্ষম করে।

আপনি যদি খুব পুরানো ডিভাইসগুলিকে টার্গেট করেন তবে আপনি Google Play Console-এ বেমানান ডিভাইসগুলিকে ফিল্টার করতে পারেন৷ এটি কতগুলি ডিভাইসকে প্রভাবিত করবে তা দেখতে আপনি আপনার অ্যাপের জন্য কনসোলটিও ব্যবহার করতে পারেন৷

বিকল্পভাবে, সর্বাধিক সামঞ্জস্যের জন্য, 32-বিট কোড রানটাইম সনাক্তকরণ করতে পারে তা নিশ্চিত করতে যে নিয়ন কোড লক্ষ্য ডিভাইসে চালানো যেতে পারে। একটি অ্যাপ CPU বৈশিষ্ট্যে উল্লিখিত বিকল্পগুলির যেকোনো একটি ব্যবহার করে এই পরীক্ষাটি করতে পারে।

অ্যাডভান্সড SIMD এক্সটেনশনের সুবিধা নিতে আপনি C এবং C++ কোডে নিয়ন ইন্ট্রিনসিক ব্যবহার করতে পারেন। Armv8-A-এর জন্য নিয়ন প্রোগ্রামার গাইড সাধারণভাবে নিয়ন অন্তর্নিহিত এবং নিয়ন প্রোগ্রামিং সম্পর্কে আরও তথ্য প্রদান করে।

নির্মাণ করুন

বিশ্বব্যাপী নিয়ন অক্ষম করুন

ndk-বিল্ড

ndk-build বিশ্বব্যাপী নিয়ন নিষ্ক্রিয় করা সমর্থন করে না। একটি সম্পূর্ণ ndk-বিল্ড অ্যাপ্লিকেশন নিয়ন নিষ্ক্রিয় করতে, আপনার অ্যাপ্লিকেশনের প্রতিটি মডিউলে প্রতি মডিউল পদক্ষেপগুলি প্রয়োগ করুন।

সিমেক

পাস -DANDROID_ARM_NEON=ON যখন CMake আহ্বান করা হয়। যদি অ্যান্ড্রয়েড স্টুডিও/গ্র্যাডল দিয়ে তৈরি করা হয়, তাহলে আপনার build.gradle-এ নিম্নলিখিত বিকল্পটি সেট করুন:

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

মডিউল প্রতি নিয়ন নিষ্ক্রিয় করুন

ndk-বিল্ড

নিয়ন ছাড়াই একটি ndk-বিল্ড মডিউলে সমস্ত সোর্স ফাইল তৈরি করতে, আপনার Android.mk-এ মডিউল সংজ্ঞায় নিম্নলিখিতগুলি যোগ করুন:

LOCAL_ARM_NEON := false

সিমেক

নিয়ন ছাড়াই CMake টার্গেটে সমস্ত সোর্স ফাইল তৈরি করতে, আপনার CMakeLists.txt-এ নিম্নলিখিতগুলি যোগ করুন:

if(ANDROID_ABI STREQUAL armeabi-v7a)
    set_target_properties(${TARGET} PROPERTIES COMPILE_FLAGS -mfpu=vfpv3-d16)
endif()

যেখানে ${TARGET} আপনার লাইব্রেরির নামের সাথে প্রতিস্থাপিত হয়।

x86 এর জন্য ক্রস-প্ল্যাটফর্ম সমর্থন

NDK তৃতীয় পক্ষের NEON_2_SSE.h ব্যবহারের মাধ্যমে x86 SSE কোডে আপনার বিদ্যমান ARM SIMD (Neon) ইনস্ট্রিনসিক ফাংশনগুলির ক্রস-প্ল্যাটফর্ম সংকলন সমর্থন করে। এই বিষয়ে আরও তথ্যের জন্য, ARM NEON থেকে Intel SSE- স্বয়ংক্রিয় পোর্টিং সমাধান, টিপস এবং কৌশলগুলি দেখুন।

কোডের উদাহরণ

hello-neon নমুনা একই সময়ে cpufeatures লাইব্রেরি এবং Neon intrinsics কিভাবে ব্যবহার করতে হয় তার একটি উদাহরণ প্রদান করে। এই নমুনাটি একটি সি সংস্করণ সহ একটি এফআইআর ফিল্টার লুপের জন্য একটি ছোট বেঞ্চমার্ক প্রয়োগ করে এবং নিয়ন সমর্থন করে এমন ডিভাইসগুলির জন্য একটি নিয়ন-অপ্টিমাইজ করা সংস্করণ।