Kodunuzdaki CPU özelliklerini kontrol etmenin birkaç yolu vardır. Her birinin farklı avantajları ve dezavantajları vardır.
ABI: Ön işlemcinin önceden tanımlanmış makrolarını kullanın
ABI'yi derleme zamanında belirlemek için genellikle #ifdef ile birlikte aşağıdaki araçları kullanmak en uygun yöntemdir:
- 32 bit ARM için
__arm__ - 64 bit ARM için
__aarch64__ __i386__32 bit X86 için- 64 bit X86 için
__x86_64__
32 bit X86'nın, beklediğiniz gibi __x86__ değil, __i386__ olarak adlandırıldığını unutmayın.
CPU çekirdek sayısı: libc'nin sysconf(3) işlevini kullanın.
sysconf(3), hem _SC_NPROCESSORS_CONF (sistemdeki CPU çekirdeklerinin sayısı) hem de _SC_NPROCESSORS_ONLN (şu anda çevrimiçi olan CPU çekirdeklerinin sayısı) hakkında sorgu yapmanıza olanak tanır.
Özellikler: libc'nin getauxval(3) işlevini kullanma
API düzeyi 18 ve daha yeni sürümlerde, getauxval(3) Android'in C kitaplığında kullanılabilir. AT_HWCAP ve AT_HWCAP2 bağımsız değişkenleri, CPU'ya özgü özellikleri listeleyen bit maskeleri döndürür. Karşılaştırılacak sabitler için NDK'deki çeşitli hwcap.h
başlıklara bakın. Örneğin, arm64'ün SHA512 talimatları için HWCAP_SHA512 veya arm'ın Thumb tamsayı bölme talimatları için HWCAP_IDIVT.
Google cpu_features kitaplığı
AT_HWCAP ile ilgili sorunlardan biri, bazen cihazların yanlışlıkla tanınmasıdır. Örneğin, bazı eski cihazlar tam sayı bölme talimatlarına sahip olduğunu iddia etse de bu talimatlara sahip değildir.
Google'ın cpu_features kitaplığı, belirli SoC'ler hakkındaki kendi bilgilerini uygulayarak (söz konusu SoC'yi belirlemek için /proc/cpuinfo ayrıştırarak) bu tür sorunları çözmek için çalışır.
Bu kitaplık, Google'ın birinci taraf uygulama ekipleri tarafından kullanılmak üzere yönetilir ve bu ekiplerin gerçek hayatta karşılaştığı her sorunlu cihaz için geçici çözümler içerir.
NDK cpufeatures kitaplığı (desteği sonlandırıldı)
NDK, bu kitaplığı kullanan uygulamalarla kaynak uyumluluğu için cpufeatures adlı, desteği sonlandırılmış bir kitaplık sunmaya devam ediyor. Daha yeni ve daha eksiksiz olan cpu_features kitaplığının aksine, bu eski kitaplık, belirli SoC'lerin çoğu için geçici çözümler sunmaz.