Funzionalità della CPU

Esistono diversi modi per verificare la presenza di funzionalità della CPU nel codice, ognuno con un diverso insieme di compromessi.

ABI: utilizza le macro predefinite del preprocessor

Di solito è più comodo determinare l'ABI in fase di compilazione utilizzando #ifdef in combinazione con:

  • __arm__ per ARM a 32 bit
  • __aarch64__ per ARM a 64 bit
  • __i386__ per X86 a 32 bit
  • __x86_64__ per X86 a 64 bit

Tieni presente che X86 a 32 bit è chiamato __i386__, non __x86__ come potresti aspettarti.

Conteggi dei core CPU: utilizza sysconf(3) di libc

sysconf(3) consente di interrogare sia _SC_NPROCESSORS_CONF (il numero di core CPU nel sistema) sia _SC_NPROCESSORS_ONLN (il numero di core CPU attualmente online).

Funzionalità: utilizza getauxval(3) di libc

Nel livello API 18 e versioni successive, getauxval(3) è disponibile nella libreria C di Android. Gli argomenti AT_HWCAP e AT_HWCAP2 restituiscono bitmask che elencano le funzionalità specifiche della CPU. Consulta le varie intestazioni hwcap.h dell'NDK per le costanti da confrontare, ad esempio HWCAP_SHA512 per le istruzioni SHA512 di arm64 o HWCAP_IDIVT per le istruzioni di divisione di interi Thumb di arm.

La libreria cpu_features di Google

Un problema con AT_HWCAP è che a volte i dispositivi vengono scambiati. Alcuni dispositivi meno recenti, ad esempio, dichiarano di avere istruzioni di divisione intera, ma non è così.

La libreria cpu_features di Google risolve questi problemi applicando la propria conoscenza di SoC specifici (analizzando /proc/cpuinfo per determinare il SoC specifico in questione).

Questa libreria viene gestita per l'utilizzo da parte dei team di app proprietarie di Google e dispone di soluzioni alternative per ogni dispositivo problematico riscontrato.

Libreria cpufeatures dell'NDK (deprecata)

L'NDK fornisce ancora una libreria ritirata denominata cpufeatures per la compatibilità dell'origine con le app che la utilizzano già. A differenza della libreria cpu_features più recente e completa, questa libreria storica non dispone di soluzioni alternative per altrettanti SoC specifici.