Funzionalità della CPU

Esistono diversi modi per verificare le funzionalità della CPU nel codice, ciascuno con un diverso insieme di compromessi.

ABI: utilizza le macro predefinite del preprocessore

In genere è più pratico determinare l'ABI al momento della creazione 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 lo standard X86 a 32 bit si chiama __i386__, non __x86__ come previsto.

Conteggi di core della CPU: utilizza il parametro sysconf(3) di libc

sysconf(3) ti consente di eseguire query sia su _SC_NPROCESSORS_CONF (il numero di core CPU nel sistema) sia su _SC_NPROCESSORS_ONLN (il numero di core CPU attualmente online).

Caratteristiche: usa getauxval(3) di libc

Nel livello API 18 e successivi, getauxval(3) è disponibile nella libreria C di Android. Gli argomenti AT_HWCAP e AT_HWCAP2 restituiscono maschere di bit che elencano le funzionalità specifiche della CPU. Consulta le varie intestazioni hwcap.h nell'NDK per le costanti con cui effettuare il confronto, ad esempio HWCAP_SHA512 per le istruzioni SHA512 di arm64 o HWCAP_IDIVT per le istruzioni per la divisione intera del pollice di leva.

La libreria Google cpu_features

Un problema di AT_HWCAP è che a volte i dispositivi sbagliano. Alcuni vecchi dispositivi, ad esempio, affermano di avere istruzioni di divisione per numeri interi, ma non lo fanno.

La libreria cpu_features di Google risolve questi problemi applicando le proprie conoscenze di SoC specifici (analizzando /proc/cpuinfo per individuare il SoC specifico in questione).

Questa libreria è gestita per essere utilizzata dai team proprietari di app di Google e offre soluzioni alternative per ogni dispositivo problematico che hanno incontrato in natura.

Libreria CPU NDK (deprecata)

L'NDK fornisce comunque una libreria deprecata 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 ha soluzioni alternative per altrettanti SoC specifici.