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.