Fonctionnalités du processeur

Il existe plusieurs façons de vérifier les fonctionnalités du processeur dans votre code. Chacune présente divers avantages et inconvénients.

ABI : utiliser les macros prédéfinies du préprocesseur

Il est généralement plus pratique de déterminer l'ABI au moment de la compilation en utilisant #ifdef conjointement avec :

  • __arm__ pour ARM 32 bits
  • __aarch64__ pour ARM 64 bits
  • __i386__ pour X86 32 bits
  • __x86_64__ pour X86 64 bits

Notez que le format X86 32 bits est appelé __i386__, et non __x86__.

Nombre de cœurs de processeur : utiliser sysconf(3) de libc

sysconf(3) vous permet d'interroger à la fois _SC_NPROCESSORS_CONF (nombre de cœurs de processeur dans le système) et _SC_NPROCESSORS_ONLN (nombre de cœurs de processeur actifs).

Fonctionnalités : utiliser la bibliothèque getauxval(3) de libc

À partir du niveau d'API 18, getauxval(3) est disponible dans la bibliothèque C d'Android. Les arguments AT_HWCAP et AT_HWCAP2 renvoient des masques de bits répertoriant les caractéristiques propres au processeur. Consultez les différents en-têtes hwcap.h du NDK pour comparer les constantes, telles que HWCAP_SHA512 pour les instructions SHA512 d'arm64 ou HWCAP_IDIVT pour les instructions de division d'entiers Thumb des appareils arm.

Bibliothèque Google cpu_features

L'un des problèmes présentés par AT_HWCAP est que parfois les appareils se trompent. Par exemple, certains anciens appareils prétendent avoir des instructions de division d'entiers, alors que ce n'est pas le pas.

La bibliothèque cpu_features de Google permet de contourner ces problèmes en appliquant sa propre connaissance de SoC spécifiques (en analysant /proc/cpuinfo pour déterminer le SoC en question).

Cette bibliothèque est gérée pour être utilisée par les équipes d'applications propriétaires de Google et propose des solutions de contournement pour tous les appareils problématiques qu'elles ont rencontrés.

Bibliothèque cpufeatures du NDK (obsolète)

Le NDK fournit toujours une bibliothèque obsolète nommée cpufeatures pour la compatibilité source avec les applications qui l'utilisent déjà. Contrairement à la bibliothèque cpu_features plus récente et plus complète, cette bibliothèque historique ne propose pas de solution de contournement pour autant de SoC spécifiques.