CPU özellikleri

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.