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