การสนับสนุน Neon

NDK รองรับ ARM Advanced SIMD หรือที่รู้จักกันในชื่อ Neon ซึ่งเป็นตัวเลือก ส่วนขยายในชุดคำสั่งสำหรับ ARMv7 และ ARMv8 นีออนให้สเกลาร์/เวกเตอร์ คำแนะนำและการลงทะเบียน (ใช้ร่วมกับ FPU) เทียบเท่ากับ MMX/SSE/3DNow! ในโลก x86

อุปกรณ์ Android ที่ใช้ ARMv8 ("arm64") ทั้งหมดรองรับ Neon เกือบทั้งหมดใช้ ARMv7 ("32 บิต") อุปกรณ์ Android รองรับ Neon รวมถึงอุปกรณ์ทั้งหมดที่จัดส่งด้วย API ระดับ 21 ขึ้นไป NDK จะเปิดใช้ Neon โดยค่าเริ่มต้นสำหรับทั้ง 2 แพลตฟอร์ม

หากกำหนดเป้าหมายไปยังอุปกรณ์ที่เก่ามาก คุณสามารถกรองอุปกรณ์ที่ใช้ร่วมกันไม่ได้ออกในส่วน Google Play Console และยังสามารถใช้คอนโซลสำหรับแอปเพื่อดูจำนวน อุปกรณ์ที่ได้รับผลกระทบนี้

หรือโค้ด 32 บิตใช้รันไทม์เพื่อให้มีความเข้ากันได้มากที่สุด การตรวจจับเพื่อยืนยันว่าโค้ดนีออนสามารถเรียกใช้บนอุปกรณ์เป้าหมายได้ แอปสามารถ ดำเนินการตรวจสอบนี้โดยใช้ตัวเลือกใดๆ ที่กล่าวถึงใน ฟีเจอร์ของ CPU

คุณสามารถใช้ องค์ประกอบภายในของนีออน ในโค้ด C และ C++ เพื่อใช้ประโยชน์จากส่วนขยาย SIMD ขั้นสูง คู่มือของ Neon Programmer สำหรับ Armv8-A ให้ข้อมูลเพิ่มเติมเกี่ยวกับภายในของ Neon และการเขียนโปรแกรม Neon โดยทั่วไป

สร้าง

ปิดใช้งาน Neon ทั่วโลก

Ndk-Build

ndk-build ไม่สนับสนุนการปิดใช้งาน Neon ทั่วโลก วิธีปิดใช้งาน Neon ทั้งหมด แอปพลิเคชัน ndk-build ให้ใช้ขั้นตอนต่อโมดูลกับทุกโมดูลใน แอปพลิเคชัน

ผู้ผลิต

ผ่าน -DANDROID_ARM_NEON=ON เมื่อเรียกใช้ CMake หากสร้างสรรค์ด้วย Android Studio/Gradle ตั้งค่าตัวเลือกต่อไปนี้ในbuild.gradle

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

ปิดใช้นีออนต่อโมดูล

Ndk-Build

หากต้องการสร้างไฟล์ต้นฉบับทั้งหมดในโมดูล ndk-build โดยไม่ใช้ Neon ให้เพิ่มแอตทริบิวต์ ต่อไปนี้กับคำจำกัดความโมดูลใน Android.mk ของคุณ

LOCAL_ARM_NEON := false

ผู้ผลิต

หากต้องการสร้างไฟล์ต้นฉบับทั้งหมดในเป้าหมาย CMake โดยไม่มี Neon ให้เพิ่มเมธอด ต่อไปนี้ใน 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 และลักษณะเฉพาะของนีออน ไปพร้อมๆ กัน ตัวอย่างนี้ใช้เกณฑ์มาตรฐานขนาดเล็กสำหรับลูปตัวกรอง FIR ด้วยเวอร์ชัน C และเวอร์ชันที่เพิ่มประสิทธิภาพด้วยแสงนีออนสำหรับอุปกรณ์ที่รองรับ Neon