web-dev-qa-db-fra.com

Quels sont les avantages d'armv7 par rapport à armv6 lors de la compilation d'applications iPhone?

S'il y a des avantages ... je n'ai rien trouvé de concluant dans la documentation.

Apparemment, armv7 est pour une version plus récente d'iOS ... est-ce plus rapide? plus petit? Mieux à X?

67
M. Ryan

L'une des plus grandes différences est que l'architecture armv6 prend en charge le matériel pour l'arithmétique à virgule flottante double précision, tandis que l'armv7 ne fournit qu'un support logiciel hérité pour l'arithmétique à virgule flottante double précision.

Pour compenser, l'architecture armv7 possède une unité "NEON" qui fournit un support matériel incroyablement rapide pour l'arithmétique à virgule flottante simple précision.

C'est quelque chose que vous devrez prendre en compte si vous faites quelque chose qui implique une arithmétique à virgule flottante, que vous le fassiez en simple ou double précision. Si vous le faites en double précision, mais que vous n'avez pas nécessairement besoin de cette précision, vous pouvez probablement obtenir une amélioration significative des performances sur les appareils armv7 en utilisant plutôt la simple précision.

Apple a couvert une grande partie des différences entre armv6 et armv7 et une introduction au framework Accelerate lors d'une de leurs sessions WWDC cette année. Les vidéos devraient toujours être disponibles sur iTunes (à partir de juillet '10).

54
Jasarien

Les anciens appareils iOS (iPhone, iPhone 3G, iPod touch de première et deuxième génération) avaient des processeurs qui ne prenaient en charge que le jeu d'instructions armv6. L'iPhone 3G S (et l'iPad et l'iPod touch de troisième génération) dispose d'un processeur plus récent qui prend également en charge le jeu d'instructions armv7. En général, armv7 est plus rapide sur ces nouveaux processeurs et il est recommandé d'inclure au moins une version armv7 dans vos applications à l'avenir (dans une application iPad uniquement, vous pouvez probablement simplement construire pour armv7).

Comme le souligne Jasarien, la zone de plus grande différence entre les jeux d'instructions concerne les opérations à virgule flottante. Sur armv6, les applications avaient tendance à être construites en utilisant le jeu d'instructions Thumb réduit pour produire des binaires plus petits, mais les performances en virgule flottante Thumb étaient terribles. Par conséquent, vous deviez désactiver Thumb si vous vouliez des calculs à virgule flottante plus rapides. Sur armv7, le jeu d'instructions Thumb-2 n'a plus cette limitation, donc Apple vous recommande de compiler en l'utilisant presque tout le temps.

Vous pouvez conditionner le paramètre de génération Thumb pour qu'il soit désactivé pour les appareils plus anciens et activé pour les plus récents. Pour ce faire, accédez à vos paramètres de construction Xcode et sélectionnez l'option Compiler pour le pouce. Accédez au menu en bas à gauche de l'écran et choisissez l'option Ajouter une condition de configuration. Dans la nouvelle condition de configuration, choisissez ARMv6 pour l'architecture, désactivez Thumb pour celle-ci, ajoutez une autre condition, choisissez ARMv7 pour son architecture et activez Thumb pour celle-ci.

Selon la réponse de Stephen Canon ici , les opérations en virgule flottante simple et double précision sont prises en charge dans le matériel d'armv6. J'ai trouvé que l'arithmétique simple précision fonctionne légèrement mieux sur cette plate-forme, peut-être en raison de plus d'opérations dans le cache. Sur armv7, l'unité à virgule flottante NEON SIMD ne fonctionne que sur les opérations en simple précision, il peut donc y avoir une grande différence de performances entre les opérations en simple et double précision.

D'autres questions qui pourraient être intéressantes à ce sujet incluent:

78
Brad Larson

Pour moi, les principaux avantages d'ARMv7 sont:

  • pouce-2
  • NÉON

NEON doit être explicitement codé, vous n'en profitez pas simplement en recompilant, mais si vous pouvez investir le temps, il peut accélérer les opérations multimédia/jeux par un facteur de 8. Cependant, le pouce-2 est à peu près une réduction gratuite de taille de code avec presque aucun inconvénient (contrairement au pouce sur ARMv6, qui rend le code à virgule flottante beaucoup plus lent par rapport à ARM). Bien sûr, l'ajout d'une autre version de votre exécutable dans ARMv7 ne réduira pas votre taille exécutable, mais cela réduira votre code dans la mémoire, les caches, etc.

4
Pierre Lebeaupin

Vous devez compiler les deux si vous souhaitez que votre application s'exécute sur iPad et tous les modèles iPhone/iPod toch. Les appareils iOS plus anciens utilisent arm6 et les nouveaux utilisent arm7.

La seule raison de ne pas compiler pour l'un ou l'autre serait la taille réduite de l'application car elle n'a besoin que d'une version compilée du code. Mais à moins que vous n'ayez une base de code sérieusement grande, cette différence de taille de fichier sera assez marginale.

3
Alex Wayne

arm7 est plus optimisé pour l'iPod Touch (3e génération) et l'iPhone 3GS et plus récent. Vous devez utiliser "Standard/arm6 + arm7" lors de la construction d'appareils plus anciens. En pratique, je n'ai pas vu beaucoup de différence de performances dans mes applications.

3
Alex Argo

Regardez ce lien, il a une bonne description des avantages, des différences, etc.

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0001a/CHDEFAGB.html

1
Maurice