Menangani fitur CPU

ABI: menggunakan makro bawaan preprosesor

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 dengan __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) serta _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 instruksi pembagian bilangan bulat, padahal 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)

Untuk kompatibilitas sumber dengan aplikasi yang sudah menggunakannya, NDK masih menyediakan library bernama cpufeatures yang tidak digunakan lagi. Tidak seperti library cpu_features yang lebih baru dan lebih lengkap, library lama ini tidak memiliki solusi untuk SOC tertentu.