2009-12-04 36 views
20

Je sais que x87 a une plus grande précision interne, ce qui est probablement la plus grande différence que les gens voient entre elle et les opérations SSE. Mais je dois me demander, est-il un autre avantage à l'utilisation de x87? J'ai l'habitude de taper -mfpmath=sse automatiquement dans n'importe quel projet, et je me demande si je manque quelque chose d'autre que le x87 FPU offre.Avantages de x87 sur SSE

Répondre

14

x87 contient des instructions qui n'existent pas dans le jeu d'instructions SSE. En dehors de la tête, il y a toutes les choses trigonométriques comme fsin, fcos, fatan, fatan2 et quelques-unes des choses exponentielles/logarithmiques.

Si votre code passe la majeure partie du temps à faire de la trigonométrie, vous pouvez voir une légère amélioration des performances si vous utilisez x87. Certains algorithmes DSP entrent dans cette catégorie.

Cependant, pour le code mathématique de code où vous passez le plus clair de votre temps à faire des ajouts, des multiplications ect. SSE est généralement plus rapide.

+0

@LiraNuna vraiment? Je ne connais aucun opcode qui calcule directement sin ou cos à partir du jeu d'instructions SSE. –

+5

S'il vous plaît fournir une source, Quonux. – asdf

+0

http://gruntthepeon.free.fr/ssemath/ – MickLH

16
  1. Il est présent sur de très vieilles machines.

EOF

4
  • Il est important héritage et une petite compatibilité du système avec le x87: SSE est une caractéristique de processeur relativement nouveau. Si votre code doit être exécuté sur un microcontrôleur intégré, il y a de fortes chances qu'il ne prenne pas en charge les instructions SSE.

  • Même les systèmes sur lesquels aucune FPU n'est installée fourniront souvent des émulateurs 80x87 qui rendront le code transparent (plus ou moins). Je ne connais pas d'émulateurs SSE - un de mes systèmes n'en a certainement pas, alors les versions les plus récentes d'Adobe Photoshop refusent de fonctionner. Les instructions 80x87 ont de bonnes caractéristiques de fonctionnement en parallèle qui ont été explorées et analysées en détail depuis son introduction en 1982 ou à peu près. Divers clones du x86 pourraient caler sur une instruction SSE.

+2

Donc, votre ligne de fond est: (a) x87 a un bon support de legs (b) x87 a été bien étudié. –

+0

Et (c) x87 est établi. – asdf

+0

Je ne suis pas 100% positif, mais je crois que sur de nombreux processeurs 32 bits sans FPU, le calcul en virgule flottante pourrait être fait plus rapidement sur des valeurs de 80 bits que des valeurs de 64 bits [une mantisse de 53 bits et 12 l'exposant -bit n'est pas plus rapide à utiliser qu'une mantisse 64 bits et un exposant 16 bits, mais il faut plus de temps pour emballer et décompresser].Je suis vraiment intrigué par la raison pour laquelle le format 80 bits a été languissant pendant les deux dernières décennies, car en tant que format de * calcul *, il semblerait supérieur à tous les égards à un double de 64 bits. – supercat

7

instructions FPU sont plus petites que les instructions SSE, elles sont donc idéales pour des trucs demoscene

+0

Je ne l'achète pas; sûrement, les programmeurs de scène de démonstration sérieux compressent leurs flux d'instructions; Les outils de compression spécifiques au domaine devraient pouvoir compresser les instructions SSE aussi bien que les instructions x87. –

+0

@StephenCanon (non compressé), mais votre point est juste si vous/ils utilisent un type de compression – Quonux

0

Conversion entre float et double est plus rapide avec x87 (généralement gratuit) qu'avec SSE. Avec x87, vous pouvez charger et stocker un float, double ou long double vers ou depuis la pile de registre et il est converti vers ou depuis une précision étendue sans coût supplémentaire. Avec SSE, des instructions supplémentaires sont nécessaires pour effectuer la conversion de type si les types sont mélangés, car les registres contiennent des valeurs float ou double. Ces instructions de conversion sont assez rapides mais prennent du temps supplémentaire.

La vraie difficulté est de s'abstenir de mélanger float et double excessivement, de ne pas utiliser x87, bien sûr.