การตรวจสอบฟีเจอร์ของ CPU ในโค้ดทำได้หลายวิธี ซึ่งแต่ละวิธีก็มีข้อดีข้อเสียแตกต่างกันไป
ABI: ใช้มาโครที่กำหนดไว้ล่วงหน้าของตัวประมวลผลล่วงหน้า
โดยปกติแล้ว การกำหนด ABI ในเวลาบิลด์โดยใช้ #ifdef
ร่วมกับรายการต่อไปนี้มักจะสะดวกที่สุด
__arm__สำหรับ ARM 32 บิต__aarch64__สำหรับ ARM 64 บิต__i386__สำหรับ X86 32 บิต__x86_64__สำหรับ X86 64 บิต
โปรดทราบว่า X86 32 บิตเรียกว่า __i386__ ไม่ใช่ __x86__ อย่างที่คุณอาจคาดไว้
จำนวนแกนของ CPU: ใช้ sysconf(3) ของ libc
sysconf(3) ช่วยให้คุณ
ค้นหาทั้ง _SC_NPROCESSORS_CONF (จำนวนคอร์ CPU ในระบบ)
และ _SC_NPROCESSORS_ONLN (จำนวนคอร์ CPU ที่ออนไลน์อยู่ในปัจจุบัน)
ฟีเจอร์: ใช้ getauxval(3) ของ libc
ในระดับ API 18 ขึ้นไป
getauxval(3)
จะพร้อมใช้งานในไลบรารี C ของ Android อาร์กิวเมนต์ AT_HWCAP และ AT_HWCAP2
จะแสดงผลบิตมาสก์ที่แสดงฟีเจอร์เฉพาะของ CPU ดูส่วนหัวต่างๆ hwcap.h
ใน NDK เพื่อดูค่าคงที่ที่จะเปรียบเทียบ เช่น HWCAP_SHA512
สำหรับคำสั่ง SHA512 ของ arm64 หรือ HWCAP_IDIVT สำหรับคำสั่งหารจำนวนเต็ม Thumb ของ arm
ไลบรารี cpu_features ของ Google
ปัญหาหนึ่งของ AT_HWCAP คือบางครั้งระบบอาจระบุอุปกรณ์ผิด อุปกรณ์รุ่นเก่าบางรุ่น เช่น อ้างว่ามีคำสั่งการหารจำนวนเต็ม แต่จริงๆ แล้วไม่มี
ไลบรารี cpu_features ของ Google แก้ไขปัญหาดังกล่าวโดยใช้ความรู้ของตนเองเกี่ยวกับ SoC ที่เฉพาะเจาะจง (โดยการแยกวิเคราะห์ /proc/cpuinfo เพื่อหา SoC ที่เฉพาะเจาะจงที่เป็นปัญหา)
ทีมแอปบุคคลที่หนึ่งของ Google เป็นผู้ดูแลรักษาส่วนนี้เพื่อใช้งาน และ มีวิธีแก้ปัญหาสำหรับอุปกรณ์ทุกเครื่องที่พบปัญหาในสภาพแวดล้อมจริง
ไลบรารี cpufeatures ของ NDK (เลิกใช้งานแล้ว)
NDK ยังคงมีไลบรารีที่เลิกใช้งานแล้วชื่อ cpufeatures เพื่อให้แหล่งที่มา
เข้ากันได้กับแอปที่ใช้ไลบรารีนี้อยู่แล้ว ไลบรารีเก่านี้ไม่มีวิธีแก้ปัญหาสำหรับ SoC บางรุ่นมากเท่ากับไลบรารี cpu_features ที่ใหม่กว่าและสมบูรณ์กว่า