Android ARMv6/v7 et VFP/NEON
J'aimerais comprendre plus le PROCESSEUR utilisé sur les téléphones Android. La raison en est que nous sommes la construction de la bibliothèque C qui a les certains CPU/math architecture de processeur drapeaux, nous pouvons définir.
-
Jusqu'à présent, nous avons constaté que tous les appareils Android les Processeurs ARM de conception et sont soit ARMv6 (appareils plus anciens, bas de gamme, Huawei, ZTE, les petits SE) ou ARMv7 (Nid d'abeille de tablettes et de tous les dispositifs plus coûteux, presque toutes avec résolution WVGA et plus), j'ai vérifié ~20 appareils et ont tous un processeur de ce type. Est-ce exact? Y a t'il d'autres?
-
Maintenant quand il s'agit du multimédia et des opérations mathématiques, je pense que les deux unités sont importants – le VFP pour l'arithmétique à virgule flottante et la SIMD - NÉON. Après avoir testé le ci-dessus mentionné groupe de périphériques, j'ai trouvé que VFP soutien est dans presque tous les appareils, tout en NÉON pas. Tout les commentaires?
-
Je ne sais pas quel est exactement le ARMv6 et ARMv7 différence (en plus de la vitesse en général). Maintenant, nous sommes à la construction d'un multimédia de la bibliothèque C, qui a quelques drapeaux pour la construction. Ma question est de savoir comment cibler le plus grand nombre de périphériques sur un côté, et de façon à permettre aux utilisateurs de mieux les périphériques à utiliser leur matériel. Ma proposition est de préparer 3 distincts: les versions de ARMv6/VFP, ARMv7/VFP et ARMv7/VFP/NÉON. D'autres propositions?
-
La ARMv6/VFP, je pense, devrait fonctionner sur toutes les configurations, à l'exception des dispositifs, qui sont absents de la VFP (par exemple l'ancien HTC Wildfire) – mais ceux qui resteront non pris en charge.
Est-ce une bonne approche? Tous les commentaires sont les bienvenus.
Ce qui concerne,
STeN
Vous devez vous connecter pour publier un commentaire.
C'est correct. Actuellement, il existe deux types de ARMv6 et ARMv7. Le plus probable dans le plus proche avenir, il y aura en outre x86. Nouveau NDK prend déjà en charge s'appuie pour cela.
VFP est obligatoire sur ARMv7, mais pas sur ARMv6. Le NÉON est facultatif, et non tous les appareils d'appui. La plus distincte exemple est Nvidia Tegra 2. Il est déployé sur la plupart des haut de gamme de tablettes et de téléphones, mais il ne supporte pas de NÉON. Tegra 3 de Nvidia qui prend en charge NÉON.
Je pense que vous devez vous en tenir à ARMv6 avec l'émulation de virgule flottante, ARMv7+VFP, ARMv7+NÉON.
Exactement - VFP n'est pas pris en charge sur tous les ARMv6 appareils. Donc, il vous suffit de ne pas l'utiliser. Par défaut NDK construit armeabi cible qui est prévu pour ARMv6 périphériques et de ne pas utiliser de VFP. armeabi-v7a construit pour ARMv7 et utilise VFP.
Je préfère me concentrer sur v7.
Il n'y a point de nouveaux produits d'expédition avec la v6, et le temps de votre bibliothèque est prêt pour la production, le v6 sera non-problème.
voici quelques infos:
- Néon comprend TOUJOURS VFP
- Coretex A8 pouvez soit Néon ou aucun
- Le VFP sur l'A8 à la Neon est en fait VFP-lite, qui est beaucoup plus lent. Beaucoup plus lent que le V6 de VFP.
- Coretex A9 et ci-dessus peuvent être dotées de Néon, VFP, ou aucun.
- V7 a beaucoup amélioré les instructions bien adapté pour les opérations mathématiques à côté de la double question de la capacité.
- La puce fournisseurs peuvent omettre Néon et même VFP, mais ils paient les mêmes frais de licence BRAS regardlessly. Ils n'enregistrer que très peu dans les coûts de fabrication.
- Néon est extrêmement puissante dans les mains capables, mais ne peut pas faire de double précision.
- À l'exception de celles avec le neonless Tegra, pas de v7 téléphone basé sur Android est connu pour moi qui n'a pas de Néon. (La raison est au-dessus)
- Tegra3 n'ont Néon
C'est vrai que la plupart des appareils Android ne tombez pas dans ces trois catégories:
1) ARMv6
2) ARMv7
3) ARMv7 + NÉON
Le NDK ne prend pas en charge intégralement. Il n'y a pas de ARMv6 ABI cible de génération, Il y a seulement deux BRAS de construire des cibles pris en charge par le NDK:
1) ARMv5 (qui fonctionnera sur tous les Android appareils ARM)
2) ARMv7 (avec en option l'utilisation de VFP et NÉON)
Les limites imposées par ce que si vous souhaitez utiliser ARMv6 instructions (en C ou ASM code), vous devez cibler la ARMv7 ABI dans le NDK.