2010-11-18 28 views
8

J'utilise le processeur Cortex-A8 et je ne comprends pas comment utiliser le drapeau -mfpu.ARM Cortex-A8: Comment utiliser à la fois NEON et vfpv3

Sur le Cortex-A8 il y a deux vfpv3 et néon co-processeurs. Auparavant, je ne pas savoir comment utiliser le néon, donc je n'utilisait

gcc -marm -mfloat-abi=softfp -mfpu=vfpv3

Maintenant, je l'ai compris comment les processeurs SIMD courir et je l'ai écrit certain code à l'aide de intrinsics NEON. Pour utiliser coprocesseur néon maintenant mon drapeau -mfpu doit changer pour -mfpu=neon, donc ma ligne de commande du compilateur ressemble à ceci

gcc -marm -mfloat-abi=softfp -mfpu=neon

Maintenant, ce que cela signifie que mon vfpv3 ne sert plus? J'ai beaucoup de code qui n'utilise pas NEON, est-ce que ces parties n'utilisent pas vfpv3.

Si à la fois le néon et vfpv3 sont toujours utilisés alors je n'ai pas de problèmes, mais si seulement un d'entre eux est utilisé, comment puis-je utiliser les deux? NEON implique également la prise en charge traditionnelle de VFP.

Répondre

10

La VFP peut être utilisée pour les calculs en virgule flottante "normale" (sans vecteur). En outre, NEON ne prend pas en charge le FP double précision, seules les instructions VFP peuvent être utilisées pour cela.
Ce que vous pouvez faire c'est ajouter -S à la ligne de commande de gcc et vérifier l'assemblage. Les instructions commençant par V (par exemple vld1.32, vmla.f32) sont des instructions NEON, et celles commençant par F (fldd, fmacd) sont VFP. (Bien que les documents ARM préfèrent maintenant utiliser le préfixe V même pour les instructions VFP, GCC ne le fait pas.)

+0

Igor Je n'ai que des valeurs à virgule flottante simple précision. En effet, je vois beaucoup d'instructions f (fadds, fsitos), donc je pense que les instructions vfp sont toujours émises par le compilateur. – HaggarTheHorrible

+0

Une question sans rapport, savez-vous ce que signifie un processeur à double émission? Cortex-A8 est un processeur à double émission, qu'est-ce que cela signifie? Pouvez-vous me montrer des liens? Ma recherche n'était pas si productive. – HaggarTheHorrible

+0

Vikram, Coretex A8 est un processeur à double sortie en panne. Cela signifie (diversement) qu'il peut faire tout ou partie de 1) décoder et mettre en file d'attente pour l'exécution de deux instructions par horloge, 2) exécuter deux telles instructions en file d'attente par horloge et/ou 3) il peut retirer deux résultats par horloge. En d'autres termes, dans les meilleures conditions, il peut exécuter deux instructions par horloge, soutenue. Les meilleures conditions ne se produisent que lorsqu'il n'y a pas d'échec de cache, de mauvaise prédiction de branche, etc. –