Ada beberapa cara untuk memeriksa fitur CPU dalam kode Anda, setiap cara memiliki konsekuensinya masing-masing.
ABI: Menggunakan makro preprosesor yang telah ditentukan sebelumnya
Biasanya, ABI paling mudah ditentukan pada waktu build menggunakan #ifdef
bersama dengan:
__arm__untuk ARM 32-bit__aarch64__untuk ARM 64-bit__i386__untuk X86 32-bit__x86_64__untuk X86 64-bit
Perlu diketahui bahwa X86 32-bit disebut __i386__, bukan __x86__ seperti yang mungkin Anda kira.
Jumlah inti CPU: Menggunakan sysconf(3) libc
sysconf(3) memungkinkan Anda
meminta _SC_NPROCESSORS_CONF (jumlah inti CPU dalam sistem)
dan _SC_NPROCESSORS_ONLN (jumlah inti CPU yang sedang online).
Fitur: Menggunakan getauxval(3) libc
Pada API level 18 dan yang lebih baru,
getauxval(3)
tersedia dalam library C Android. Argumen AT_HWCAP dan AT_HWCAP2 menampilkan bitmask yang mencantumkan fitur khusus CPU. Lihat berbagai header hwcap.h dalam NDK untuk konstanta yang perlu dibandingkan, seperti HWCAP_SHA512 untuk instruksi SHA512 arm64, atau HWCAP_IDIVT untuk instruksi pembagian bilangan bulat Thumb arm.
Library cpu_features Google
Salah satu masalah dengan AT_HWCAP adalah terkadang beberapa perangkat mengalami kesalahan. Beberapa perangkat
lama, misalnya, mengklaim memiliki petunjuk pembagian bilangan bulat, tetapi sebenarnya tidak.
Library cpu_features Google mengatasi
masalah tersebut dengan menerapkan pengetahuannya sendiri tentang SoC tertentu (dengan menguraikan
/proc/cpuinfo untuk menangani SoC tertentu yang dimaksud).
Library ini dikelola untuk digunakan oleh tim aplikasi pihak pertama Google, dan memiliki solusi untuk setiap perangkat bermasalah yang dijumpainya dalam situasi apa pun.
Library cpufeatures NDK (tidak digunakan lagi)
NDK masih menyediakan library bernama cpufeatures yang tidak digunakan lagi untuk kompatibilitas
sumber dengan aplikasi yang sudah menggunakannya. Tidak seperti library cpu_features
yang lebih baru dan lebih lengkap, library lama ini
tidak memiliki solusi untuk SoC tertentu.