Cortex bras-A8: Quelle est la différence entre le VFP et le néon

dans le processeur ARM Cortex-A8, je comprends ce qu'est le néon, c'est un co-processeur SIMD.

mais l'unité VFP (Vector Floating Point), qui est aussi un co-processeur, fonctionne-t-elle comme un processeur SIMD? Si oui, lequel est le meilleur à utiliser?

j'ai lu quelques liens tels que: -

  1. Link1

  2. Link2.

mais pas vraiment très clair ce qu'ils signifient. Ils disent que VFP était Je n'ai jamais eu l'intention de L'utiliser pour SIMD mais sur Wiki j'ai lu le suivant - "l'architecture VFP prend également en charge l'exécution de courtes instructions vectorielles, mais celles-ci fonctionnent sur chaque élément vectoriel de façon séquentielle et n'offrent donc pas la performance d'un véritable parallélisme SIMD (Single Instruction Multiple Data)."

il n'est pas si clair ce qu'il faut croire, est-ce que quelqu'un peut développer plus sur ce sujet?

39
demandé sur Tamar E. Granor 2010-11-04 16:16:56

4 réponses

Il y a une grande différence entre les deux. Neon est un processeur D'accélérateur SIMD (Single Instruction Multiple Data) faisant partie du ARM core. Cela signifie que lors de l'exécution d'une instruction, la même opération va se produire jusqu'à 16 ensembles de données en parallèle. Comme il y a du parallélisme à l'intérieur du néon, vous pouvez obtenir plus de MIPS ou de FLOPS hors du néon qu'un processeur SISD standard fonctionnant à la même fréquence d'horloge.

Le plus grand avantage du néon est si vous voulez exécuter l'opération avec des vecteurs, c.-à-d. encodage/décodage vidéo. De plus, il peut effectuer des opérations en virgule flottante(float) en parallèle.

VFP est un accélérateur de matériel flottant classique. Ce n'est pas une architecture parallèle comme Néon. Fondamentalement, il effectue une opération sur un ensemble d'entrées et renvoie une sortie. Son but est d'accélérer le calcul des points flottants. Il soutient la pointe flottante de précision simple et double.

Vous avez 3 possibilités d'utilisation du néon:

  • utiliser intrinsèques fonctions #include "arm_neon.h"
  • inline l'assemblée de code
  • laissez le gcc faire les optimisations pour vous en fournissant -mfpu=neon comme argument (gcc 4.5 est bon sur cet)
37
répondu Cosmin Cojocar 2015-07-05 15:20:26

sur le plan architectural, VFP (qui ne s'appelait pas Vector Floating Point pour rien) a en effet une disposition pour fonctionner sur un vecteur flottant dans une seule instruction. Je ne pense pas qu'il exécute en fait des opérations multiples simultanément (comme true SIMD), mais il pourrait sauver une certaine taille de code. Cependant, si vous lisez le manuel de référence de L'Architecture ARM dans L'aide au requin (comme je le décris dans mon introduction au néon, lien 1 dans la question), vous verrez à la section A2.6 que la caractéristique vectorielle VFP est déprécié dans ARMv7 (ce qui est ce que le Cortex A8 met en œuvre), et le logiciel devrait utiliser SIMD avancé pour les opérations vectorielles à virgule flottante.

pire encore, dans L'implémentation Cortex A8, VFP est implémenté avec une unité d'exécution VFP Lite (lire lite comme occupant une plus petite surface de silicium, pas comme ayant moins de fonctionnalités), ce qui signifie qu'il est en fait plus lent que sur L'ARM11, par exemple! Heureusement, la plupart des instructions VFP de précision simple sont exécutées par l'unité néon, mais je suis pas sûr que les opérations vectorielles VFP le fassent; et même si elles le font, elles s'exécutent certainement plus lentement qu'avec des instructions de néon.

j'Espère que efface chose!

16
répondu Pierre Lebeaupin 2010-11-06 22:04:46

pour armv7 ISA (et variantes)

le néon est un SIMD et une unité de traitement de données en parallèle pour les données à virgule entière et à virgule flottante et le VFP est une unité à virgule flottante entièrement compatible IEEE-754. En particulier sur L'A8, l'unité néon est beaucoup plus rapide pour presque tout, même si vous n'avez pas de données hautement parallèles, puisque le VFP n'est pas pipeliné.

alors pourquoi utiliser le VFP?!

la différence la plus importante est que le VFP offre une double précision de point flottant.

deuxièmement, il y a quelques instructions spécialisées que VFP offre qu'il n'y a pas d'implémentations équivalentes pour l'unité néon. SQRT vient à l'Esprit, peut-être quelques conversions de type.

registre FPSCR Description.

parce qu'il n'est pas conforme à la norme IEEE-754, un compilateur ne peut pas générer ces instructions à moins que vous ne disiez au compilateur que vous n'êtes pas intéressé par la pleine conformité. Cela peut être fait de plusieurs façons.

  1. utilisation d'une fonction intrinsèque pour forcer L'usage du néon, par exemple voir le GCC Neon liste de fonctions intrinsèques.
  2. demandez au compilateur, très gentiment. Même les nouvelles versions de GCC avec -mfpu=neon ne générera pas flottant point Neon instructions sauf si vous spécifiez aussi -funsafe-math-optimizations.

pour armv8+ ISA (et variantes) [mise à Jour]

le néon est maintenant entièrement compatible IEE-754, et du point de vue du programmeur (et du compilateur), il n'y a pas trop de différence. La Double précision a été vectorisée. Du point de vue de la micro-architecture, je doute que ce soient des unités matérielles différentes. ARM documente les instructions scalar et vector séparément, mais les deux sont partie de " Advanced SIMD."

15
répondu Peter M 2015-06-19 23:02:28

IIRC, le VFP est un coprocesseur à virgule flottante qui fonctionne de façon séquentielle.

Cela signifie que vous pouvez utiliser l'instruction sur un vecteur de flotteurs pour SIMD-comme comportement, mais en interne, l'instruction est effectuée sur chaque élément du vecteur dans l'ordre.

alors que le temps global requis pour l'instruction est réduit de ce fait en raison de l'instruction de chargement simple, le VFP a encore besoin de temps pour traiter tous les éléments de l'instruction vecteur.

True SIMD va gagner plus de performances nettes en virgule flottante, mais l'utilisation de la VFP avec des vecteurs est encore plus rapide que l'utilisation purement séquentielle.

2
répondu sum1stolemyname 2010-11-04 13:58:40