27 votes

Existe-t-il un moyen de compiler pour ARM plutôt que Thumb dans Xcode 4?

Apple recommande à la compilation pour les BRAS plutôt que le pouce s'il y a beaucoup d'opérations en virgule flottante en cours. Mon ensemble de l'application est presque une grande opération de virgule flottante.

Voici ce qu'ils disent dans l'Application iOS processus de Développement Guide:

les appareils iOS en charge deux jeux d'instructions, le BRAS et le Pouce. Utilise Xcode Pouce instructions par défaut, parce que l'utilisation de Pouce généralement réduit code taille d'environ 35% par rapport au BRAS. Les Applications qui ont vaste virgule flottante code pourrait mieux fonctionner si elles utilisent des BRAS instructions plutôt que le Pouce. Vous pouvez désactiver le Pouce pour votre l'application, de sorte qu'il compile pour les BRAS, en définissant le Compiler pour le Pouce construire paramètre Pas.

Cependant, je ne trouve pas de "Compiler pour le Pouce" dans mes paramètres de construction. Ont-ils le renommer? Ou n'est-ce pas disponible maintenant avec Xcode 4?

47voto

Brad Larson Points 122629

Tout d'abord, les conseils pour ne pas compiler pour la Manette de jeu d'instructions afin d'améliorer la performance en virgule flottante uniquement s'applique vraiment à l'ancienne ARMv6 appareils.

ARMv7 matériel (iPhone 3G S et la plus récente, y compris tous les iPads) utilise le plus efficace de Pouce-2 du jeu d'instructions, qui ne souffre pas de la même sorte de virgule flottante de ralentissements. Pour ARMv7 construit, il est recommandé dans presque tous les cas que vous construisez pour le Pouce. J'ai apporter un peu plus de détail à ce sujet dans ma réponse ici.

Cela explique peut-être pourquoi ce compilateur paramètre n'est plus exposée comme une option courante, parce que ARMv7 appareils sont la grande majorité des appareils iOS là-bas.

Si vous voulez faire cela pour seulement votre ARMv6 construit, vous pouvez aller à vos paramètres de construction et la souris sur les "Autres C Drapeaux". Cliquez sur le petit bouton "plus" qui apparaît à droite de cette option et ajouter une condition pour l'architecture ARMv6. Le faire de nouveau, d'en créer une pour l'architecture ARMv7. En vertu de l'architecture ARMv6, ajouter un petit compilateur drapeau de l' -mno-thumb (comme Kevin l'indique).

Vous devriez vous retrouver avec quelque chose qui ressemble à la suivante:

Build settings for ARMv6

Je le fais dans une de mes applications, parce que je ne vois un boost de performance sur les anciens ARMv6 appareils avec qui. Cependant, une autre de mes applications a été plus lente lorsqu'il n'est pas de bâtiment pour le Pouce sur ARMv6, de sorte que vous aurez envie de profil de cette première.

En outre, il n'y a actuellement un bug du Compilateur LLVM 3.0 fourni avec Xcode 4.2 (qui a depuis été corrigé en 4.2.1, à partir de ce que j'entends) où les calculs en virgule flottante sont compilés mal de Pouce pour ARMv6. Si vous utilisez cette version de Xcode, vous aurez besoin de faire cela pour un bon comportement sur les appareils plus anciens.

8voto

Kevin Ballard Points 88866

Je ne sais pas si "Compile for Thumb" est censé exister dans Xcode 4, mais vous pouvez toujours ajouter -mno-thumb au paramètre de construction Other C Flags .

3voto

xoconoxtle Points 115

Concernant votre question initiale: j'ai remarqué que les "Compiler pour le Pouce" (dans la section "Génération de Code" de votre Projet "Build Settings") dans Xcode 4.2.1 n'est disponible que si vous êtes en utilisant LLVM CCAG 4.2 (si elle est définie dans le "Compilateur C/C++/Objective-C")!

Si la compilation avec Apple LLVM 3.0, alors vous ne trouverez pas de "Compiler pour le Pouce" option. Mais - comme Brad déjà dit - vous pouvez toujours modifier la "les Autres C des Drapeaux" de l'option pour désactiver le Pouce mode.

Un autre point intéressant: je suis en utilisant le sqlite fusion source dans mon projet (j'ai besoin de fts - recherche en texte intégral) et, à partir de la compilation avec LLVM 3.0 j'ai eu étrange et plutôt plantages aléatoires sur armv6 appareils lors de l'accès à la base de données: il s'avère que c'était à cause de Pouce pas en mode désactivé lors de la compilation pour armv6 appareils.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X