SSE2
Le SSE2 , coulant des prolongements de SIMD 2 , est l'un des ensembles d'instruction de du SIMD (instruction simple, données multiples) du IA-32 que SSE2 a été présenté la première fois par le Intel avec la version initiale du Pentium de 4 dans le 2001 . Il prolonge l'ensemble d'instruction plus tôt du SSE , et est prévu pour supplanter entièrement le MMX . Intel a prolongé SSE2 pour créer le SSE3 dans le 2004 . SSE2 a ajouté 144 nouvelles instructions à SSE, qui a 70 instructions. Le rival AMD de chip-maker a ajouté le soutien de SSE2 avec l'introduction de leur Opteron et de Athlon 64 gammes de des unités centrales de traitement 64-bit du AMD64 dans le 2003 .
Changements
SSE2 prolonge les instructions MMX d'opérer des registres de MMX, permettant au programmeur d'éviter complètement le " 64-bit de huit registres MMX ; aliased" ; sur la pile de registre originale de la virgule flottante IA-32. Ceci laisse mélanger le nombre entier SIMD et les opérations scalaires de virgule flottante sans commutation de mode exigée entre MMX et opérations de virgule flottante du X87 . Cependant, ceci est éclipsé par la valeur de pouvoir effectuer les opérations MMX sur les registres plus larges de SSE.
D'autres prolongements SSE2 incluent un ensemble de la cachette - instructions de de commande prévues principalement pour réduire au minimum la pollution de cachette de en traitant les jets indéfinis d'information, et un complément sophistiqué des instructions numériques de conversion de format.
L'exécution d'AMD de SSE2 sur ( X86-64 ) la plate-forme AMD64 inclut les 8 registres additionnels, doublant tout le nombre à 16 (XMM0 par XMM15). Ces registres additionnels sont seulement évidents en courant en mode 64-bit. Intel a adopté ces registres additionnels en tant qu'élément de leur soutien de l'architecture x86-64 (ou dans le langage d'Intel, " ; Intel 64" ;) en 2004.
Différences entre x87 FPU et SSE2
De FPU (x87) d'instructions les résultats intermédiaires de magasin toujours avec 80 bits de précision. Quand des algorithmes de logiciel du legs FPU sont mis en communication à SSE2, certaines combinaisons des opérations de maths ou des ensembles de données entrés peuvent avoir comme conséquence la déviation numérique mesurable. C'est d'importance critique pour des calculs scientifiques, si les résultats de calcul doivent être comparés contre des résultats produits d'une architecture différente de machine.Un problème notable se pose quand un compilateur doit interpréter une expression mathématique se composant de plusieurs opérations (s'ajoutant, soustrayant, division, se multipliant). Selon le compilateur (et des optimisations) utilisés, différents résultats intermédiaires d'une expression mathématique donnée peuvent devoir être temporairement sauvés, et être rechargés plus tard. Ceci a comme conséquence une troncation de 80 bits à 64 bits dans le x87 FPU. Selon quand cette troncation est exécutée, le résultat numérique final peut finir vers le haut différent. Le code suivant de Fortran compilé avec G95 est offert comme exemple.
programme salut vrai a, b, c, d vrai x, y, z a=.79 y=-a/b + (a/b+c)*EXP (d) copie *, y z= (- a) /b + (a/b+c)*EXP (d) copie *, z x=y-z copie *, x extrémité
Compilation à 387 instructions de virgule flottante et à rendements courants : # g95 - o salut - mfpmath=387 - fzero - ftrace=full - fsloppy-carboniser hi.9604645E-8
Compilation aux instructions SSE2 et aux rendements courants : # g95 - o salut - le mfpmath=sse - msse2 - fzero - ftrace=full - fsloppy-carbonisent hi.
Différences entre MMX et SSE2
SSE2 prolonge les instructions MMX de fonctionner aux registres de MMX. Par conséquent, il est possible de convertir tout le code MMX existant en équivalent SSE2. Puisqu'un registre de MMX est deux fois tant que un registre MMX, des compteurs de boucle et l'accès mémoire peuvent devoir être changés pour adapter à ceci.Bien qu'une instruction SSE2 puisse opérer deux fois autant données qu'une instruction MMX, l'exécution ne pourrait pas augmenter de manière significative. Deux raisons importantes sont : les données SSE2 de accès dans la mémoire non alignée sur une frontière de byte 16 encourront la pénalité significative, et la sortie des instructions SSE2 dans la plupart des réalisations du X86 est habituellement plus petite que les instructions MMX. Le Intel a récemment abordé le premier problème en ajoutant une instruction dans le SSE3 de réduire les frais généraux d'accéder à des données unaligned, et le dernier problème en élargissant le moteur d'exécution dans leur microarchitecture de noyau de .
Utilisation de compilateur
Une fois d'abord présenté en 2000, SSE2 n'a pas été soutenu par des instruments de développement de logiciel. Par exemple, pour employer SSE2 dans un projet du studio de réalisateur de Microsoft de , le programmeur a dû manuellement écrire l'objet-code d'en ligne-assemblée ou d'importation d'une source extérieure. Plus tard le paquet de processeur de Visual C++ a ajouté l'appui SSE2 à Visual C++ et à MASMLe compilateur d'Intel C++ de peut automatiquement produire de SSE4/SSSE3/SSE3/SSE2 et/ou de SSE-code sans utilisation d'assemblée main-codée, laissant le foyer de programmeurs sur le développement algorithmique au lieu de l'exécution d'ensemble-niveau. Depuis son introduction, le compilateur C d'Intel a considérablement augmenté l'adoption de SSE2 dans le développement d'applications de Windows.
Depuis GCC 3, GCC peut automatiquement produire du code SSE/SSE2 scalaire quand la cible soutient ces instructions. Le vectorization automatique pour SSE/SSE2 a été ajouté depuis GCC 4.
La suite de compilateur de studio de Sun de peut également produire des instructions SSE2 quand le drapeau de compilateur - le xvector=simd est employé.
Unités centrales de traitement soutenant SSE2
AMD K8 - unités centrales de traitement basées ( Athlon 64 , Sempron 64 , Turion 64 , etc.) de
NetBurst - unités centrales de traitement basées (Pentium 4 , Xeon , Celeron , etc.) d'Intel
Pentium M d'Intel et Celeron M
Le Celeron D d'Intel a examiné avec CPU-Z
Le Intel creusent - les unités centrales de traitement basées (Core Duo, solo de noyau, etc.)
Le Intel creusent 2 - unités centrales de traitement basées (duo de noyau 2, creusent le quadruple 2, etc.)
Transmeta Efficeon
par l'intermédiaire du C7 de
Unités centrales de traitement IA-32 notables ne soutenant pas SSE2
SSE2 est une prolongation de l'architecture du IA-32 . Par conséquent aucune architecture qui ne soutient pas IA-32 ne soutient SSE2. Unités centrales de traitement du X86-64 tout le IA-32 d'instrument, par définition. Toutes les unités centrales de traitement connues du X86-64 mettent en application également SSE2. Puisqu'IA-32 antidate SSE2, les premières unités centrales de traitement IA-32 ne l'ont pas mis en application. SSE2 et les autres ensembles d'instruction de SIMD ont été prévus principalement pour améliorer le soutien d'unité centrale de traitement des graphiques en temps réel, notamment jeu. Une unité centrale de traitement qui n'est pas lancée sur le marché à cette fin ou qui a un ensemble d'instruction de l'alternative SIMD n'a aucun besoin de SSE2.
Ce qui suit est une liste d'unités centrales de traitement qui ont mis en application IA-32 après que SSE2 ait été développé, mais qui n'a pas mis en application SSE2 :
unités centrales de traitement du AMD de
avant le Athlon 64 , y compris toute la douille A - unités centrales de traitement basées de
Unités centrales de traitement d'Intel avant le Pentium 4
par l'intermédiaire du C3 de
Transmeta Crusoe
Voir également
SSE SSE2
SSE3
SSSE3
SSE4
SIMD
3DNow ! Professionnel
Listes d'instruction du X86
.
| Random links: | Liste d'équations relativistes | Michael Owen | Utopie d'Isaac Asimov | Système de roquette d'artillerie légère Selander | Partie fédérale (Argentine) | SSE2 |