Kodunuzdaki CPU özelliklerini kontrol etmenin, her birinin farklı dengeleme seçenekleri olan birkaç yolu vardır.
ABI: Ön işlemcinin önceden tanımlanmış makrolarını kullanma
ABI'yı derleme zamanında, genellikle aşağıdakilerle birlikte #ifdef
kullanarak belirlemek en kolay yöntemdir:
- 32 bit ARM için
__arm__
- 64 bit ARM için
__aarch64__
- 32 bit X86 için
__i386__
- 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ıları: libc'nin sysconf(3) özelliğini kullanın
sysconf(3), hem _SC_NPROCESSORS_CONF
(sistemdeki CPU çekirdek sayısı) hem de _SC_NPROCESSORS_ONLN
(şu anda online olan CPU çekirdek sayısı) için sorgu oluşturmanıza olanak tanır.
Özellikler: libc'nin getauxval(3) özelliğini kullanın
API düzeyi 18 ve üzeri sürümlerde, Android'in C kitaplığında getauxval(3) 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 sabit değerler için NDK'daki çeşitli hwcap.h
başlıklarına bakın. Örneğin, arm64'ün SHA512 talimatları için HWCAP_SHA512
veya kolun başparmak tam sayı bölme talimatları için HWCAP_IDIVT
.
Google cpu_features kitaplığı
AT_HWCAP
ile ilgili sorunlardan biri, cihazların bazen karıştırılmasıdır. Örneğin, bazı eski cihazlar tamsayı bölme talimatlarına sahip olduğunu iddia eder ancak bu talimatlara sahip değildir.
Google'ın cpu_features kitaplığı, belirli çip üzerinde sistem (SoC) hakkındaki bilgi birikimini kullanarak (söz konusu belirli çip üzerinde sistem (SoC) değerini belirlemek için /proc/cpuinfo
ayrıştırma yöntemiyle bu sorunlar üzerinde çalışır.
Bu kitaplık, Google'ın birinci taraf uygulama ekipleri tarafından kullanılmak üzere korunur ve dünyada karşılaşılan her sorunlu cihaz için geçici çözümler içerir.
NDK cpufeatures kitaplığı (kullanımdan kaldırıldı)
NDK, halihazırda bu kitaplığı kullanan uygulamalarla kaynak uyumluluğu için cpufeatures
adlı kullanımdan kaldırılmış bir kitaplığı sağlamaya devam etmektedir. Daha yeni ve daha eksiksiz cpu_features kitaplığından farklı olarak bu geçmiş kitaplığı, fazla sayıda belirli çip üzerinde sistem için geçici çözümler sunmaz.